【问题标题】:What's the best way of iterating through multiple lists of different sizes simultaneously in C++ using iterators?使用迭代器在 C++ 中同时迭代多个不同大小的列表的最佳方法是什么?
【发布时间】:2014-04-28 10:25:11
【问题描述】:

我正在使用std::list 创建我的列表。链表中的每一项都包含一个char的链表。每个列表可以有不同数量的字符。

我想为每个列表使用一个迭代器一次迭代列表的 3 个元素。当我遍历它时,我想沿着中间线的整个长度移动并同时检查上下线中的字符。

例如如果以下是我的char链表链表的内容,

  1. abcdef
  2. 敏捷的棕狐
  3. zxy

我想遍历第二个列表(中间)并检查上面和下面的字符。例如t - a 上而 z 下,h - b 上而 x 下等。问题是当列表 3 和 1 停止时,我仍然想迭代到列表 2 的末尾而不会出现列表 1 的错误和 3 整理。

我不太确定如何解决这个问题,因为我最初为我的中间列表设置了一个 for 循环,并且手动增加了上下列表,但是当上列表或下列表的数量较少时遇到了一些问题元素比我的中间列表所做的。

例如我有这样的事情:

list<char>::const_iterator i, u, l
u = upper_row.begin();
l = lower_row.begin();
for (i = middle_row.begin(); i != middle_row.end(); i++) 
{
  // code to do something with upper, middle and lower lists
  u++;
  l++
}

【问题讨论】:

  • 在外部列表结束后你想做什么?
  • @Yakk 当我超过上限或下限列表的末尾时,我想停止遍历已停止的列表,并继续遍历中间和任何未结束的列表。
  • 您的短语“t - a is upper”是什么意思?我没有在上面的字符串中找到字符 t。你能详细说明你想要什么吗?
  • @VladfromMoscow 我的意思是中间字符串中的“t”在该位置具有来自上字符串的“a”和来自下字符串的“z”。
  • @AnonUser 还有什么?你打算用它做什么?

标签: c++ list linked-list iterator char


【解决方案1】:

检查上/下的列表迭代器是否已到达末尾。然后相应地更改您的逻辑,使其适用于不存在下限或上限的情况。

list<char>::const_iterator i, u, l
u = upper_row.begin();
l = lower_row.begin();
for (i = middle_row.begin(); i != middle_row.end(); ++i) 
{
  bool has_upper = (u != upper_row.end());
  bool has_lower = (l != lower_row.end());
  // code to do something with upper, middle and lower lists
  // >> only do something with upper/lower if has_upper/has_lower is true
  if(has_upper) ++u;
  if(has_lower) ++l;
}

附加说明:迭代器始终使用++i,而不是i++

【讨论】:

  • 感谢您的回复!这对我来说很有意义,但是您能否详细说明使用 ++i 代替 i++ 迭代器?
  • @AnonUser:主要原因是避免与坚持使用++i 的人发生争执。 ++i 在某些情况下也有可能更有效,所以无论如何这可能是个好主意。
猜你喜欢
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2016-08-02
相关资源
最近更新 更多