【问题标题】:c++ going from start iterator to end iterator and performing actionc ++从开始迭代器到结束迭代器并执行操作
【发布时间】:2020-08-03 00:20:12
【问题描述】:

如果我有一个开始迭代器和一个结束迭代器指向定义为的结构:

struct point {
int x;
int y;
};

,我想从开始迭代器到结束迭代器(包括),并将结构中的x值一个接一个地附加到一个向量中,我该怎么做?

我的问题是这样的标准 for 循环:

for (auto it = start_iterator; it != end_iterator; ++it)

将不包含结束迭代器,但我也很乐意使用 stl 算法/库。

【问题讨论】:

  • "将不包含结束迭代器" - 这是有意的。但这并不意味着您的 points 之一将被排除 - 迭代器范围是右侧专有的。这意味着如果你有[1, 2, 3],那么begin 指向1,但end 指向一个虚构元素过去 3,所以3 将是包括。请提供有关此评论的更多背景信息。
  • 我想考虑 end_iterator 指向的元素
  • 这意味着您的end_iterator 被认为是非标准的,您不应做出导致此类问题的设计决策。您如何获得您的end_iterator?它的类型是什么?
  • @user11508332 没有结束迭代器指向的元素。这就是它指向过去结束的意义......
  • 在你用find_if初始化你的end_iterator后,简单地增加它,你将再次陷入end_iterator指向过去的常见情况。

标签: c++ iterator range c++17 std


【解决方案1】:

假设end_iterator 实际上指向一个元素(意味着可以安全地获得一个过去的迭代器),您可以使用std::next from <iterator>

for (auto it = start_iterator; it != std::next(end_iterator); ++it) { ... }

【讨论】:

    【解决方案2】:

    Iterators 在 C++ 中是由一对定义半开范围 [begin:end) 的迭代器定义的序列。 即 begin 指向序列的第一个元素,end 指向序列的最后一个元素。

    参考:C++ 编程语言:Stroustrup。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2011-08-22
      • 2011-10-22
      相关资源
      最近更新 更多