我在创建通过从文本文件中读取值而创建的2D矢量字符串时遇到轻微的麻烦。我最初认为我需要使用数组。但是我已经意识到矢量会更适合我想要实现的目标。
到目前为止,这是我的代码:
我已经全局初始化了向量,但没有给出行数或列数,因为我希望在读取文件时确定它:
vector<vector<string>> data;
在名为&#34; test&#34;的文件中测试数据目前看起来像这样:
test1 test2 test3
blue1 blue2 blue3
frog1 frog2 frog3
然后我有一个打开文件的函数,并尝试将字符串从text.txt复制到向量。
void createVector()
{
ifstream myReadFile;
myReadFile.open("text.txt");
while (!myReadFile.eof()) {
for (int i = 0; i < 5; i++){
vector<string> tmpVec;
string tmpString;
for (int j = 0; j < 3; j++){
myReadFile >> tmpString;
tmpVec.push_back(tmpString);
}
data.push_back(tmpVec);
}
}
}
但是,当我尝试在main函数中检查向量的大小时,它会返回值&#39; 0&#39;。
int main()
{
cout << data.size();
}
我想我只需要一双新鲜的眼睛告诉我哪里出错了。我觉得问题在于createVector函数,尽管我并不是100%肯定。
谢谢!
答案 0 :(得分:1)
您应该先使用std::getline
获取数据行,然后从行中提取每个字符串并添加到矢量中。这样可以避免评论中指出的while -- eof()
问题。
以下是一个例子:
#include <string>
#include <iostream>
#include <vector>
#include <sstream>
typedef std::vector<std::string> StringArray;
std::vector<StringArray> data;
void createVector()
{
//...
std::string line, tempStr;
while (std::getline(myReadFile, line))
{
// add empty vector
data.push_back(StringArray());
// now parse the line
std::istringstream strm(line);
while (strm >> tempStr)
// add string to the last added vector
data.back().push_back(tempStr);
}
}
int main()
{
createVector();
std::cout << data.size();
}