将矢量推入另一个矢量

时间:2013-09-09 20:06:59

标签: c++ vector

我有一个这样的文件:

98
287 2352
987 4313 3253
235 34325 432 123

基本上我想重现这个文件。我试图一次导入一行,提取数字,并将它们推入向量。每个向量被推入更大的向量。

int main(int argc, char* argv[])
{
    int sum = 0, one = 0, two = 1;
    std::string line, number;
    std::vector<int> vec;
    std::vector<std::vector<int>> bigvec;
    auto k = vec.begin();
    std::ifstream in(argv[1]);
    while(in >> line) {
        std::istringstream is(line);
        while(is >> number) {
            vec.push_back(stoi(number));
        }
        bigvec.push_back(vec);
        while(!vec.empty()) {
            vec.pop_back();
        }
        std::cout << std::endl;
    }
    return 0;
}

我的代码虽然在打印结果时,似乎将每个数字放在它自己的向量中而不是再现文件。

所以我的输出是

98
287
2352
etc.

似乎就行了

while(is >> number) {
    vec.push_back(stoi(number));
}

按下一个数字,然后退出循环。

我哪里错了?

2 个答案:

答案 0 :(得分:4)

你的问题在于:

while(in >> line)

C ++ by defult读取,直到遇到间隔或新行。在你的情况下,它遇到新行之前的间隔。如果你想采取整行:

getline(cin, line);

答案 1 :(得分:4)

while(in >> line)从输入中读取下一个。如果您想阅读整个,请使用getline(in, line)

您可以添加多个优化代码。例如,不是在你读过的字符串上使用stoi,而是可以从输入流中读取一个整数。而不是逐个弹出向量的元素,您只需调用clear