我正在执行一项任务,需要从包含多个char链接列表的链表计算度量(每行是一个链表,如图所示)。所以我需要遍历包含第二行空间的每个节点,以检查其他四个空格(顶部,底部,左侧,右侧)周围有多少个空格。例如,参考下图,第三行中的第二个空格周围有四个空格,因此计数++。 (“H”只是意味着非空间角色,抱歉我没有足够的声誉来发布真实的图片)。
我被允许使用STL链表库。我试图使用三个迭代器同时迭代三行。但是,代码变得非常混乱,甚至无法正常工作,因为每行的长度不同。我一直在考虑解决方案两天,但由于我已经练习C ++只有两个月了,所以我能想到的是相当有限的。所以我想知道是否有人能给我一个提示或更聪明的解决方案。
空间|空间| --H - | --H - | - H - | NULL | NULL
--- H - | --H --- |空间|空间| --- H- | - H - | NULL
--- H - |空间|空间|空间| - H-- |空间| NULL
空间| --H - |空间|空间| - H - | NULL | NULL
答案 0 :(得分:0)
以下可能有所帮助:(在C ++ 11中):Live example。
std::size_t countSpaceSurroundBySpace(const std::list<std::list<char>>& l)
{
if (l.size() < 3u) {
return 0u;
}
auto it1 = l.begin();
auto it2 = std::next(it1);
auto it3 = std::next(it2);
std::size_t count = 0u;
for (; it3 != l.end(); ++it1, ++it2, ++it3) {
// pointers on the 5 characters
std::list<char>::const_iterator its[5] = {
it1->begin(),
it2->begin(),
it2->begin(),
it2->begin(),
it3->begin()
};
if (its[0] == it1->end()) { continue; }
++its[0];
if (its[2] == it2->end()) { continue; }
++its[2];
++its[3];
if (its[3] == it2->end()) { continue; }
++its[3];
if (its[4] == it3->end()) { continue; }
++its[4];
for (; its[0] != it1->end() && its[3] != it2->end() && its[4] != it3->end();) {
if (std::all_of(std::begin(its), std::end(its), [](std::list<char>::const_iterator it) { return *it == ' '; })) {
++count;
}
for (auto& it : its) {
++it;
}
}
}
return count;
}
答案 1 :(得分:0)
您可以std::vector
使用std::list::iterator
。如果iterator
尚未位于相应的list
end()
,那么您将拥有一个内循环,只需在每一步执行您想要的任何计算。如果您的传入list
依次作为数组或vector
提供,则会更容易。