【问题标题】:Pushing a vector into an vector将向量推入向量
【发布时间】:2010-12-30 16:30:33
【问题描述】:

我有一个二维向量

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

所以我的二维向量是这里的数据。它有像这样的元素,

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

现在我想将这些元素插入到另一个二维向量中

 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 或类似的操作。

谢谢

附:我昨晚问了这个问题,没有得到任何回应,这就是我再次发布它的原因。

【问题讨论】:

  • 到底有什么问题?顺便说一句,如果你想逐个元素地推送双值,你需要嵌套 for 循环。
  • 您还想在循环中做什么?您可能不需要逐个元素地复制项目,但我们需要更多信息才能为您提供正确的答案。否则,一个简单的嵌套 for 循环就足够了。
  • 拜托,你能明确你的实际问题吗?到目前为止,您的代码看起来不错。
  • 我想检查一个条件并增加内部迭代器的值。例如,如果满足条件,那么我将在循环中执行 data_it+=3 或类似的操作。
  • “我昨晚问了这个问题,但没有得到任何回应,这就是我再次发布它的原因。” - 请更新原始问题,而不是重新提出相同的问题。至少提供一个link to the original

标签: c++ vector iterator


【解决方案1】:

如果你需要的是:

检查条件和增量 里面的迭代器的值。为了 例如,如果一个条件满足,那么 我会这样做+=3 或类似的东西 在循环内。

然后使用while 循环而不是formigth 帮助:

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;
  }
}

【讨论】:

  • 我的实际问题是 window.push_back ( *data_it );不管用。什么是替代方案?如何将元素插入到这样的向量中?
  • @Antonio: 如果倒数第二个元素满足条件呢?
  • @Sunil:你怎么知道window.push_back ( *data_it );不起作用?是编译器错误还是运行时错误?
  • @icecrime:这将是一个问题:)。您必须在增量之前检查它。 += 3 只是一个例子。我显然误解了 Sunil 的问题。
  • @Sunil:访问程序范围之外的内存时会发生分段错误。使用调试器会有所帮助。
【解决方案2】:

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

对于二维数组的元素复制,您需要一个嵌套循环,正如@AmbiguousX 已经提到的。 如果你从一个空的二维数组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);
}

【讨论】:

  • "您的代码当前逐行复制数据,而不是逐个元素。"他的所作所为并没有错。复制每一行也会复制它的元素。
  • @Tomalak Geret'kal:原则上不是,但问题是针对元素进行复制,所以我想指出这一点。
  • 对不起,你说得对。我一定已经浏览了 OP 问题中的那一段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多