gpt4 book ai didi

c++ - 我应该如何以相反的顺序遍历 C++ 容器的元素?

转载 作者:行者123 更新时间:2023-12-01 14:04:33 24 4
gpt4 key购买 nike

<分区>

假设我是一名新手 C++ 程序员。我有一个 C++ 容器;比如说,一个 vector :

std::vector<int> vec { 12, 34, 56, 78 };

我知道我可以用一个简单的循环遍历所有元素:

for(std::vector<int>::size_type i = 0; i < vec.size(); i++) {
std::cout << vec[i] << '\n';
}

也许我什至了解了一点现代 C++,所以我知道我可以使用范围 for 循环:

for(auto x : vec) {
std::cout << x << '\n';
}

但是现在,我想以相反的顺序 遍历元素。基于范围的 for 循环不会这样工作。对于普通循环,我必须小心并避免下溢,所以也许是这样的? :

for(std::vector<int>::size_type i = 0; i < vec.size(); i++) {
std::cout << vec[vec.size() - i] << '\n';
}

但是 - 我不喜欢循环计数器的含义与我们正在查看的相反。但是,如果我在 vec.size()-1 处开始 i,我将面临在最后一个元素之后发生下溢的风险。所以我可能需要这样做,对吧?

for(std::vector<int>::size_type i = vec.size(); i > 0 ; i--) {
std::cout << vec[i - 1] << '\n';
}

嗯,这也不对劲。我应该为反向迭代使用哪些习语,这些习语是安全的(即不易出错)、美观且合理简洁?

注意事项:

  • 我尽量使标题措辞简单(而不是说“反向迭代容器”)。
  • 受到 this question 的启发,其中一个简单的反向迭代循环有一个错误。
  • 想用元素制作容器的拷贝,然后以通常的方式反转和迭代它。
  • 我没有在上面的循环中使用 auto&const auto&,因为新手编码人员通常不知道它们。

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