为什么我的全局变量向量没有存储我的数据?
Why is my global variable vector not storing my data?
我阅读了一个包含 "," 个分隔词的文本文件。
我逐行阅读了这个文件。
取一行后,我使用 split 函数将其拆分为单词。这里我用','来分隔行中的单词。
我定义了一个全局向量,所以我认为我可以将所有单词存储在该向量中。
在向量从 split 函数中出来之前一切正常。
代码运行良好。但它不会将单词存储在向量中。
在拆分函数的底部,您可以看到我写的那一行。 cout<<evec.size()<<endl;
那一行是逐行检查向量的大小
如果第一行有 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
参数。 “按值”意味着,实际上,此参数是传递给此函数的原始参数的副本,对此参数的任何更改都不会影响传入的对象,它只是一个独立的副本。
根据定义,“全局变量”不需要传递给函数。它是全球可访问的。只需从此函数中删除此参数即可。
另一方面,如果您真的不想使用全局变量,则需要采用不同的方法。但是你说全局变量是故意的。
我阅读了一个包含 "," 个分隔词的文本文件。
我逐行阅读了这个文件。
取一行后,我使用 split 函数将其拆分为单词。这里我用','来分隔行中的单词。
我定义了一个全局向量,所以我认为我可以将所有单词存储在该向量中。
在向量从 split 函数中出来之前一切正常。
代码运行良好。但它不会将单词存储在向量中。
在拆分函数的底部,您可以看到我写的那一行。 cout<<evec.size()<<endl;
那一行是逐行检查向量的大小
如果第一行有 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
参数。 “按值”意味着,实际上,此参数是传递给此函数的原始参数的副本,对此参数的任何更改都不会影响传入的对象,它只是一个独立的副本。
根据定义,“全局变量”不需要传递给函数。它是全球可访问的。只需从此函数中删除此参数即可。
另一方面,如果您真的不想使用全局变量,则需要采用不同的方法。但是你说全局变量是故意的。