gpt4 book ai didi

c++ - 迭代器如何映射/知道它们的当前位置或元素

转载 作者:太空狗 更新时间:2023-10-29 23:50:25 27 4
gpt4 key购买 nike

考虑以下代码示例:

#include <vector>
#include <numeric>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <functional>

int main()
{
std::vector<int> v(10, 2);
std::partial_sum(v.cbegin(), v.cend(), v.begin());
std::cout << "Among the numbers: ";
std::copy(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';

if (std::all_of(v.cbegin(), v.cend(), [](int i){ return i % 2 == 0; })) {
std::cout << "All numbers are even\n";
}
if (std::none_of(v.cbegin(), v.cend(), std::bind(std::modulus<int>(),
std::placeholders::_1, 2))) {
std::cout << "None of them are odd\n";
}
struct DivisibleBy
{
const int d;
DivisibleBy(int n) : d(n) {}
bool operator()(int n) const { return n % d == 0; }
};

if (std::any_of(v.cbegin(), v.cend(), DivisibleBy(7))) {
std::cout << "At least one number is divisible by 7\n";
}
}

如果我们看一下这部分代码:

if (std::all_of(v.cbegin(), v.cend(), [](int i){ return i % 2 == 0; })) {
std::cout << "All numbers are even\n";
}

这很容易理解。它遍历那些 vector 元素,并找出 i%2==0 ,它们是否可以被 2 完全整除,从而找出它们是否为偶数。

它的 for 循环对应物可能是这样的:

for(int i = 0; i<v.size();++i){
if(v[i] % 2 == 0) areEven = true; //just for readablity
else areEven = false;
}

在这个 for 循环示例中,很明显我们正在处理的当前元素是 i,因为我们实际上正在访问 v[i]。但是为什么相同代码的迭代器版本会映射 i 或知道我们正在访问的当前元素是什么?

[](int i){ 如何返回 i % 2 == 0; }) 确保/知道 i 是迭代器指向的当前元素。

如果不使用任何 v.currently_i_am_at_this_posiition() ,我无法弄清楚迭代是如何完成的。我知道迭代器是什么,但我很难掌握它们。谢谢:)

最佳答案

迭代器是根据指针建模的,确实如此。它们在内部如何工作并不重要,但可能的实现实际上是在内部有一个指向当前元素的指针。

关于c++ - 迭代器如何映射/知道它们的当前位置或元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30452359/

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