如何解决为什么我的全局变量向量没有存储我的数据?
我一行一行地阅读了这个文件。
取一行后,我使用split 功能将其拆分为单词。在这里,我使用 ',' 表示行中的单独单词。
我定义了一个全局向量,所以我认为我可以将所有单词存储在该向量中。
一切正常,直到向量从 split 函数中出来。
代码工作正常。但它不会将单词存储在向量中。
在 split 函数的底部你可以看到我写的那一行。 cout<<evec.size()<<endl;
那一行是逐行检查vector的大小。
如果第一行有 13 个逗号分隔的单词,则显示 13 个(这意味着它存储了它)
但是一旦您退出拆分功能,该数据就不再可用。我该怎么做才能将所有单词存储在这个向量中?
#include<iostream>
#include<string>
#include<stdio.h>
#include <fstream>
#include <vector>
using namespace std;
std::vector<string> evec;
void split( string st,vector<string> evec){
string z = " ";
for ( char s : st){
if ( s==','){
evec.push_back(z);
z = " ";
}
else{
z = z + s;
}
}
cout<<evec.size()<<endl;
}
int main( ){
string st;
ifstream Myfile("file.txt");
while(getline(Myfile,st))
{
split(st,evec);
}
cout<< evec.size() <<endl;
for (auto& it : evec) {
cout << it << endl;
}
return 0;
}
解决方法
void split( string st,vector<string> evec){
此 split()
函数的第二个参数称为 evec
。无论如何,它与恰好具有相同名称的全局变量完全无关。仅仅因为它与全局变量同名并不意味着它是同一个对象,它不是。
此外,它会按值传递给此函数。此函数更改其 evec
参数。 “按值”意味着,实际上,此参数是传递给此函数的原始参数的副本,对此参数的任何更改都不会影响传入的对象,它只是一个独立的副本。>
根据定义,“全局变量”不需要传递给函数。它是全局可访问的。只需从此函数中删除此参数即可。
另一方面,如果您真的不想使用全局变量,则需要一种不同的方法。但是你说全局变量是故意的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。