C++ 在使用getline读取文件时将值迭代到向量中

C++ 在使用getline读取文件时将值迭代到向量中,c++,vector,C++,Vector,我正在尝试创建一个向量,该向量填充了“blokus tiles”(周期或星星的tiles,维度为5x5)文件中每个字符串行的大小。该文件作为字符串向量向量读入 vector <std::string> tile vector <vector<string>> alltiles 这看起来不错。但是,我尝试通过以下方式将数字列表转换为向量: if (infile.is_open()) { //infile is open only if 3 or 4 ar

我正在尝试创建一个向量,该向量填充了“blokus tiles”(周期或星星的tiles,维度为5x5)文件中每个字符串行的大小。该文件作为字符串向量向量读入

vector <std::string> tile 
vector <vector<string>> alltiles
这看起来不错。但是,我尝试通过以下方式将数字列表转换为向量:

if (infile.is_open()) {   //infile is open only if 3 or 4 arguments
  int i = 0;
  while (std::getline(infile, tileline)) {
    for (int i=0; i <= tileline.end(); i++) {   
      vector <int> sizenums;
      sizenums[i] = tileline.length();
      i++;
      cout << sizenums << std::endl;
    }
    //cout << actualtilesize << std::endl;
  }
  tile.push_back(tileline);
  alltiles.push_back(tile); 
}
infile.close();

std::ofstream outfile;
outfile.open(arginfile);  
for (auto e: tile) { 
  cout << e << std::endl; 
}
if(infle.is_open()){//infle仅当3或4个参数时才打开
int i=0;
while(std::getline(infle,tileline)){

对于(int i=0;i两件事,您需要在向量上迭代以打印出它的内容,并且不能使用
sizenums[i]=tileline.length();
因为向量刚刚初始化,所以必须使用类似于
sizenums.push_的内容(tileline.length());
但是你使用它的方式还是错误的,每次循环时你都在重新初始化变量,因此你只是用它来临时存储一个变量。相反,如果你想实际存储每一行的长度,那么你需要将它移到循环之外。我不知道你为什么把
I++;
放在那里n、 这似乎没有必要

for (int i=0; i <= tileline.end(); i++) {   
   vector <int> sizenums;
   sizenums[i] = tileline.length();

不要手动增加循环变量。for循环已经处理了这个问题。

您必须迭代向量。请参阅:谢谢!这很有意义。我使用push_back,将向量置于for和while循环之外,并在tileline.end()前面放置一个解引用操作符。我以前肯定错过了额外的I++程序,谢谢你指出。这很有效,只是它似乎只打印了文件的最后一行(正在修复)。谢谢!
if (infile.is_open()) {   //infile is open only if 3 or 4 arguments
  int i = 0;
  while (std::getline(infile, tileline)) {
    for (int i=0; i <= tileline.end(); i++) {   
      vector <int> sizenums;
      sizenums[i] = tileline.length();
      i++;
      cout << sizenums << std::endl;
    }
    //cout << actualtilesize << std::endl;
  }
  tile.push_back(tileline);
  alltiles.push_back(tile); 
}
infile.close();

std::ofstream outfile;
outfile.open(arginfile);  
for (auto e: tile) { 
  cout << e << std::endl; 
}
for (int i=0; i <= tileline.end(); i++) {   
   vector <int> sizenums;
   sizenums[i] = tileline.length();
vector<int> sizenums;
vector <int> sizenums;
...
for (int i=0; i <= tileline.end(); i++) {  
    sizenums.push_back(tileline.length());
 for(int i ...
     ...
     i++;