在c ++中同时迭代多个链表

时间:2014-04-17 11:08:35

标签: c++

我正在执行一项任务,需要从包含多个char链接列表的链表计算度量(每行是一个链表,如图所示)。所以我需要遍历包含第二行空间的每个节点,以检查其他四个空格(顶部,底部,左侧,右侧)周围有多少个空格。例如,参考下图,第三行中的第二个空格周围有四个空格,因此计数++。 (" H"只是意味着非空间角色,抱歉我没有足够的声誉来发布真实的图片)。

我被允许使用STL列表库。我试图使用三个迭代器同时迭代三行。但是,代码变得非常混乱,甚至无法正常工作,因为每行的长度不同。我一直在考虑解决方案两天,但由于我已经练习C ++只有两个月了,所以我能想到的是相当有限的。所以我想知道是否有人可以给我一个提示或更聪明的解决方案。

提前感谢您的建议。


空间|空间| --H - | --H - | - H - | NULL | NULL

--- H - | --H --- |空间|空间| --- H- | - H - | NULL

--- H - |空间|空间|空间| - H-- |空间| NULL

空间| --H - |空间|空间| - H - | NULL | NULL

1 个答案:

答案 0 :(得分:1)

如果你可以使用任何标准库容器,那么我建议使用矢量矢量。这样,您可以通过索引循环并在相邻向量上使用该索引。如果你可以在算法之前填充向量,那么你可以制作相同大小的所有向量,并首先用所有非空格(零的?)填充它们,然后用链接列表的内容填充它们。

对于固定大小的向量,它基本上应该是2个嵌套循环(从第二个到最后一个但只有一个条目),只检查空格和相邻空格。

未经测试:

bool isSpace(char c) { return c == ' '; } // std::isspace tests for all whitespaces

int countSurroundedSpaces(const std::vector<std::vector<char> >& vecs)
{
  int count = 0;
  for (int v = 1; v < vecs.size()-1; ++v)
  {
    for (int i = 1; i < vecs[v].size()-1; ++i)
    {
      if (isSpace(vecs[v][i]) 
          && isSpace(vecs[v-1][i]) && isSpace(vecs[v][i-1]) 
          && isSpace(vecs[v][i+1]) && isSpace(vecs[v+1][i]))
      {
        ++count;
      }
    }
  }
  return count;
}