赞
踩
让我们来谈谈迭代器,它是一个非常有用的工具,在整个EOS代码库中大量使用。如果您来自JavaScript背景,您可能已经熟悉迭代器,就像它们用于循环一样。迭代器的关键概念是提供一种更好的方法来遍历项集合。额外的好处是您可以为任何自定义类实现迭代器接口,使迭代器成为遍历数据的通用方法。
// @url: https://repl.it/@MrToph/CPPBasics-Iterators #include <iostream> #include <vector> using namespace std; int main() { vector<int> v{2, 3, 5, 8}; // old way to iterate for (int i = 0; i < v.size(); i++) { cout << v[i] << "\n"; } // using Iterators // begin() returns an iterator that points to the beginning of the vector // end() points to the end, can be compared using != operator // iterators are incremented by using the + operator thanks to operator-overloading for (vector<int>::iterator i = v.begin(); i != v.end(); i++) { // iterators are dereferenced by * like pointers // returns the element the iterator is currently pointing to cout << *i << "\n"; } // auto keyword allows you to not write the type yourself // instead C++ infers it from the return type of v.begin for (auto i = v.begin(); i != v.end(); i++) { cout << *i << "\n"; } // can use arithmetic to "jump" to certain elements int thirdElement = *(v.begin() + 2); cout << "Third: " << thirdElement << "\n"; // end is the iterator that points to the "past-the-end" element // The past-the-end element is the theoretical element that would follow the last element in the vector. // It does not point to any element, and thus shall not be dereferenced. int lastElement = *(v.end() - 1); cout << "Last: " << lastElement << "\n"; // do not go out of bounds by iterating past the end() iterator // the behavior is undefined // BAD: v.end() + 1, v.begin() + 10 }
在现代C++中,迭代器是迭代元素集合(向量,列表,映射)的首选方式。另外,auto关键字可以避免输入word类型,但可能会导致代码性能降低。
使用迭代器,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。