除非是需要修改容器元素的内容,否则在使用迭代器的时候,应该使用其const
版本,也就是指向const
类型元素的指针,以避免误操作。
对于容器类,直接使用其成员函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <vector> #include <iostream>
int main(void) { std::vector<int> val = {1, 2, 3, 4, 5};
std::cout << "The contents of vector are:\n"; for (auto it = val.cbegin(); it != val.cend(); ++it) { std::cout << *it << "\n"; } std::cout << "\n";
return 0; }
|
对于非容器类,使用标准库提供的非成员函数
在 c++14
及以后的版本中,标准库才提供了cbegin()、cend()、
这些函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <vector> #include <iostream>
int main(void) { int val[] = {1, 2, 3, 4, 5};
std::cout << "The contents of vector are:\n"; for (auto it = std::cbegin(val); it != std::cend(val); ++it) { std::cout << *it << "\n"; } std::cout << "\n";
return 0; }
|
如果想要在 c++11 中使用,那就需要自定义函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <vector> #include <iostream>
template <class C> auto cbegin(const C& container)->decltype(std::begin(container)) { return std::begin(container); }
template <class C> auto cend(const C& container)->decltype(std::end(container)) { return std::end(container); }
int main(void) { int val[] = {1, 2, 3, 4, 5};
std::cout << "The contents of vector are:\n"; for (auto it = cbegin(val); it != cend(val); ++it) { std::cout << *it << "\n"; } std::cout << "\n";
return 0; }
|