gpt4 book ai didi

c++ - 如何在运行时选择迭代器方向

转载 作者:行者123 更新时间:2023-12-01 15:05:13 26 4
gpt4 key购买 nike

我想选择在运行时遍历容器的方向,如以下示例代码所示:

#include <iostream>
#include <vector>

void iterate(bool forward, std::vector<int> v) {
auto start = v.begin();
auto end = v.end();
if (!forward) {
start = v.rbegin(); // this doesn't
end = v.rend(); // work
}

for (auto it = start; it != end; ++it) {
std::cout << *it << " -> " << *std::next(it) << std::endl;
}
std::cout << std::endl;
}

int main() {
std::vector<int> v{1, 2, 3, 4, 5};
iterate(true, v);
iterate(false, v);
}
如何在运行时更改迭代器方向,而无需复制for循环?
想象一下,循环是一个相当复杂的算法,您不想复制该算法以避免将来的维护问题。请注意,我需要访问循环主体中的std::next / std::previous元素。

最佳答案

有了一点间接性,即使用帮助器函数,您可以调用一个模板函数,该函数接受要循环播放的迭代器类型,例如

template<typename Iterator>
void iterate_helper(Iterator start, Iterator end)
{
for (auto it = start; it != end; ++it)
{
std::cout << *it << " -> " << *std::next(it) << std::endl;
}
std::cout << std::endl;
}

void iterate(bool forward, std::vector<int> v)
{
if (!forward)
iterate_helper(v.rbegin(), v.rend());
else
iterate_helper(v.begin(), v.end());
}

以防万一此示例代码是真实代码,请注意,for循环中的 *std::next(it)将超出容器末尾。您的结束条件需要在 end之前停止使用它。

关于c++ - 如何在运行时选择迭代器方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63340778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com