Cod*_*ith 1 c++ for-loop stdlist c++11
如果我正确理解基于范围的for循环,它会扩展
for ( range_declaration : range_expression ) loop_statement
Run Code Online (Sandbox Code Playgroud)
成
{
auto && __range = range_expression ;
for (auto __begin = begin_expr, __end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
Run Code Online (Sandbox Code Playgroud)
因此增加指针,如果我理解std::lists在内部实现为双链表,那么假设这样的东西不能打印是不正确的0 1 2 3,因为内存地址不是连续的(隐含的++__begin)?
std::list<int> myList = {0, 1};
std::list<int> otherList = {10, 11};
myList.push_back(2);
myList.push_back(3);
for(auto& i: myList)
std::cout << i << " ";
Run Code Online (Sandbox Code Playgroud)
然而它确实打印正确.那么,是否std::list::iterator覆盖了for-for-loop扩展中使用的运算符的行为?
如果我选择实现自己的范围 - 可迭代数据结构,这对我来说特别重要.
从而递增指针
不,递增迭代器.
并且std::list迭代器知道该怎么做......否则它将是无用的,你将无法对你的列表做任何事情.:)
只有像向量这样的连续数据才能将迭代器实现为基本指针,尽管如此,你经常会发现迭代器类型至少是指针的某种包装(例如在调试模式下Visual Studio添加了边界检查).