STL中的容器迭代器
在容器的学习过程中,使用迭代器跳转插入。做了个简单测试
void test()
{
//指定位置插入,index使用迭代器
list<int> L;
//尾插
L.push_back(10);
L.push_back(11);
L.push_back(12);
L.push_back(13);
//在list的第二个位置插入一个元素 1000
list<int>::iterator it = L.begin();
it = it+2;
L.insert(it, 1000);
}
运行这个test的时候报错
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2676 二进制“+”:“std::_List_iterator<std::_List_val<std::_List_simple_types<_Ty>>>”不定义该运算符或到预定义运算符可接收的类型的转换 list容器 C:\Users\liufeng\source\repos\list容器\list容器\list容器.cpp 161
主要是因为STL中的List是一个双向循环的链表,而链表的内存空间是不连续的,它只能通过指针域去搜索前后一个节点,无法根据某个节点地址,直接通过偏移量计算出任意节点的地址,所以它只提供一个双向迭代器,只能自加和自减。而vector的内存空间是连续的,它可以通过迭代器的偏移很快算出任意位置的元素地址。
所以vector的迭代器可以 it= it+n;
而list的迭代器智能it++/it–;
同理,类似于stack/queue等内存不连续的容器,都无法进行迭代器的随机访问。