【发布时间】:2022-08-17 20:29:22
【问题描述】:
目前我的代码是这样的
std::vector<int> listOfItems;
for(int i=0; i<listOfItems.size()-1; i++)
{
doSomething(listOfItems.at(i), listOfItems.at(i+1);
}
我想知道是否可以避免使用此代码并使用任何 STL 算法以获得更好的可读性。 谢谢
-
可能是
std::for_each之类的东西? -
但我认为对于每个你一次只能处理一个元素,不是吗?
-
正确的。但是您的可变 lambda 只是为循环的下一次迭代保存每个值(并且除了第一次调用它之外不做任何事情)。
-
你可以使用
std::adjacent_find但不要。除了i应该是std::size_t而不是int之外,您的循环没有任何问题。您还需要确保在循环开始之前您的向量不为空。 -
代码有一个bug,因为当
listOfItems为空时listOfItems.size()-1会有一个非常大的值。因此,您需要在运行循环之前进行检查。一旦你明白了,不要在listOfItems.at(i)和listOfItems.at(i+1)上浪费时间;你知道i和i+1是有效的索引。只需使用listOfItems[i]和listOfItems[i+1]。