The*_*abu 14 c++ iterator rust
C++迭代器的典型示例是指针,可用于指向C数组中的元素,如下所示:
int array[] = {1, 2, 3, 4};
int* begin = std::begin(array); //Starting iterator
int* end = std::end(array) //Ending iterator
for(int* i = begin; i < end; i++)
{
std::cout << *i << ',';
}
//Prints 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)
这很简单.来自cplusplus.com的迭代器的定义是
迭代器是指向一系列元素(例如数组或容器)中的某个元素的任何对象,它能够使用一组运算符迭代该范围的元素...
这是有道理的; 在上面的代码中有两个迭代器(begin和end迭代器),它使用一个for循环并递增.
在Rust中,迭代器的使用方式如下:
let vect = vec![1, 2, 3, 4];
let vect_iter = vect.iter();
Run Code Online (Sandbox Code Playgroud)
什么?要迭代它,你可以:
vect_iter.next();
vect_iter.next();
Run Code Online (Sandbox Code Playgroud)
我在Rust文档中找不到任何指针的确切定义,但是看一下该Iterator特性,似乎迭代器是容器的包装器,通过以某种方式标准化逻辑来实现更容易的处理(如果是一点都有意义.
我的主要问题是:
Mat*_* M. 15
迭代器是在编程语言中找到的概念,用于指代允许迭代集合或元素序列的构造.这个概念是故意模糊的,这是一个概念!它没有规定任何具体的实施.
为了更容易区分C++和Rust,我将使用不同的名称:
是的,那些完全是武断的.请注意,如果您查看Java或C#等语言,您会发现它们也使用流.
C++
首先,不要使用cplusplus.com.cppreference.com要好得多.
迭代器是指向一系列元素(例如数组或容器)中的某个元素的任何对象,它能够使用一组运算符迭代该范围的元素...
简单,错误.
游标可以是:
通常,奇异值用于表示:
vec.end(),std::find(...).您可以增加光标,有时也可以减少光标.如果你这样做,你通常需要一对游标来知道何时停止.
为什么C++使用这样的表示?因为C就是这样做的,它运作得很好......虽然它很容易出错.
锈
Rust努力安全,并且喜欢易于使用的API.这排除了一对游标:
为了控制边界,别名和避免对不匹配,你必须使用单个对象; 因此类似流的API.
IteratorRust中的API让人联想到Java和C#,虽然Rust通过使用它来改进它,Option<T>使得它不是笨拙hasNext()/ next()调用对,而是提供一种方法next(),它既可以推进流,也可以发出信号.
结论
Rust和C++都有一种迭代元素集合的方法:
两种语言都提供外部和内部迭代:
++或next()),std::foreach和Iterator::foreach).