【问题标题】:Push values into a 2d vector then iterate through it将值推入二维向量,然后遍历它
【发布时间】:2014-10-21 18:59:29
【问题描述】:

我有一个包含数据的文件。数据的位置对于它们所在的行很重要。可以有多列数据。在我将每个值存储到一个向量中后,我尝试将该数据放入另一个 2D 向量中,以便以后可以使用它并且更有条理。我尝试遍历执行此操作的代码,但我不确定问题是在我将数据存储在 2D 向量中还是在尝试遍历 2D 向量时。

columns = numOfValues / rows;

int count = 1;
vector<double> temp;
for(vector<double>::iterator it = data.begin(); it != data.end(); ++it)
{
    temp.push_back(*it);
    if (count == columns){
        allData.push_back(temp);
        temp.clear();
        count = 1;
    }
    count++;
}

int q, w = 0;
for(vector<vector<double> >::iterator i = allData.begin(); i != allData.end(); ++i){
    q++;
    cout << "upper vec: " << q << endl;
    for(vector<double>::iterator j = i->begin(); j != i->end(); ++j){
        w++;
        cout << "lower vec: " << w << endl;
        cout<< "2d vect values" << *j << endl;
    }
}

我的问题是,当我尝试通过迭代器访问数据时,没有一个数据在正确的位置,当它是一列数据时,它只打印出第一个值并停止。我似乎看不到像现在这样打印数据的模式。 如果有人知道问题可能出在哪里,我将不胜感激。谢谢

【问题讨论】:

  • 不清楚你在问什么。
  • 抱歉,我会修复它,谢谢。
  • 为什么要复制到锯齿状向量?你可以只索引temp[x+y*columns]
  • 很难知道你在做什么,但是检查向量和指针/​​引用/迭代器的使用是一件好事,那就是重新分配是否正在发生。 IE。如果你正在做 push_backs 等,除非你保留内存,否则不能保证迭代器是有效的

标签: c++ vector multidimensional-array iterator


【解决方案1】:

第一个循环中的错误是您在开始新行时也会增加count,因此修复该错误的一种方法是编写

if (count == columns){
     // ...
}
else {
    count++;
}

顺便说一句,您忘记初始化变量q,另外您应该检查numOfValues 是否可以被rows 整除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多