0

我使用下面的代码将多个 .dat 文件读入 2D 向量并打印出标记值。但是,我需要知道编译完成后是否所有标记值都将存储在内存中,以及如何引用某个元素token[3][27],例如作为进一步处理的示例:

for (int i = 0; i < files.size(); ++i) {
        cout << "file name: " << files[i] << endl;

        fin.open(files[i].c_str());
        if (!fin.is_open()) {
            cout<<"error"<<endl;
        }


        std::vector<vector<string>> tokens;

        int current_line = 0;
        std::string line;
        while (std::getline(fin, line))
        {

            cout<<"line number: "<<current_line<<endl;
            // Create an empty vector for this line
            tokens.push_back(vector<string>());

            //copy line into is 
            std::istringstream is(line);
            std::string token;
            int n = 0;

            //parsing
            while (getline(is, token, DELIMITER))
            {
                tokens[current_line].push_back(token);
                cout<<"token["<<current_line<<"]["<<n<<"] = " << token <<endl; 
                n++;
            }
            cout<<"\n";
            current_line++;
        }
        fin.clear();
        fin.close();

    }

我需要为每个文件创建 2D 矢量吗?这可以在 C++ 运行时实现吗?

4

1 回答 1

1

如果你想进一步使用你的二维向量,你需要在for循环之外声明它。你这样做的方式是创建一个局部变量,每次循环迭代都会销毁该变量。

for (int i = 0; i < files.size(); ++i) {
    std::vector<vector<string>> tokens(i);
}
tokens[0][0]; // you can't do it here: variable tokens not declared in this scope

当然,您可以tokens在 while 循环之后立即使用您的容器,按照您提到的方式处理某些令牌。

要在 for 循环之外使用标记,您可以制作一个包含文件、行、标记的 3D 向量,或者将其设为返回某个文件的 2D 向量的函数,然后您可以对其进行处理。

于 2013-06-09T15:16:46.387 回答