先看一個函數定義如下:
template <typename T>
auto Blocker<T>::ObservedEnd() const -> Iterator {return observed_msg_queue_.end();
}
1 迭代器:Iterator
2 C++ auto 返回類型推導:-> Iterator
3 函數體限定不能修改成員:const
常用迭代器:
iterator
const_iterator
reverse_iterator
const_reverse_iterator
迭代器常用方法:
begin(): 返回指向vector第一個元素的迭代器。
end(): 返回指向vector最后一個元素的下一個位置的迭代器。
rbegin(): 返回指向vector最后一個元素的迭代器,用于逆向遍歷。
rend(): 返回指向vector第一個元素前一個位置的逆向迭代器,用于逆向遍歷的結束位置。
cbegin(): 與begin()類似,返回指向vector第一個元素的const迭代器,不允許修改元素。
cend(): 與end()類似,返回指向vector最后一個元素的下一個位置的const迭代器,不允許修改元素。
crbegin(): 與rbegin()類似,返回指向vector最后一個元素的const逆向迭代器,逆向不可修改。
crend(): 與rend()類似,返回指向vector第一個元素前一個位置的const逆向迭代器,逆向不可修改。
例子:
#include <iostream>
#include <unordered_map>
#include <vector>
#include <string> using Iterator = typename std::vector<int>::iterator;
std::vector<int> v = {1, 2, 3, 4, 5}; auto testRet()->Iterator{return v.begin();
}int main() { for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) { *it = *it + 1;std::cout << *it << ' '; } std::cout << std::endl; for (std::vector<int>::iterator it = testRet(); it != v.end(); ++it) { *it = *it + 1;std::cout << *it << ' '; } std::cout << std::endl; for (std::vector<int>::const_iterator it = v.cbegin(); it != v.cend(); ++it) { std::cout << *it << ' '; } std::cout << std::endl; return 0;
}
參考文檔:
Iterator library - cppreference.com