将矢量推入矢量

时间:2010-12-30 16:30:34

标签: c++ vector iterator

我有一个2d矢量

typedef vector <double> record_t;
typedef vector <record_t> data_t;
data_t data;

所以我的2d矢量是这里的数据。它有像,

这样的元素
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5

现在我想将这些元素插入另一个2d向量

 std::vector< vector<double> > window;

所以我做的是创建一个迭代器来遍历数据行并将其推入窗口,如

std::vector< std::vector<double> >::iterator data_it;

    for (data_it = data.begin() ; data_it != data.end() ; ++data_it){
      window.push_back ( *data_it );
      // Do something else
      }

有人可以告诉我哪里错了或建议这样做吗?顺便说一下,我想逐个元素推送它,因为我希望能够在循环中做一些其他事情。即我想检查条件并增加迭代器内部的值。例如,如果条件满足,那么我将在循环中执行data_it + = 3或类似的操作。

由于

P.S。我昨晚问了这个问题并且没有得到任何回复,这就是我再次发布的原因。

2 个答案:

答案 0 :(得分:0)

如果您需要的是:

  

检查条件和增量   迭代器里面的值。对于   例如,如果条件满足那么   我会做+ = 3或类似的事情   在循环中。

然后使用while循环代替for migth帮助:

std::vector< std::vector<double> >::iterator data_it = data.begin();

while (data_it != data.end()) {
  window.push_back ( *data_it );
  if (SatisfiesCondition(*data_it)) {
    data_it += 3;
  }
  else {
    ++data_it;
  }
}

答案 1 :(得分:0)

您的代码目前逐行复制数据,而不是逐个元素。

对于2D数组的逐元素复制,您需要一个嵌套循环,如已提到的@AmbiguousX。 如果从空的2D数组window开始,代码应如下所示:

for (std::vector< record_t >::iterator i = data.begin(); i != data.end(); i++)
{
  std::vector<double> row;
  for (std::vector<double>::iterator j = i->begin(); j != i->end(); j++)
  {
    row.push_back(*j);
    // do something else with *j
  }
  window.push_back(row);
}