相关疑难解决方法(0)

什么是迭代器的默认值?

对于我正在使用的任何STL容器,如果我使用迭代器的默认构造函数声明一个迭代器(此特定容器类型),迭代器将初始化为什么?

例如,我有:

std::list<void*> address_list;
std::list<void*>::iterator iter;
Run Code Online (Sandbox Code Playgroud)

什么会被初始化?

c++ containers iterator stl default

60
推荐指数
3
解决办法
5万
查看次数

std ::推进超出容器结束时的行为

当你说:std :: advance的行为是什么时候:

std::vector<int> foo(10,10);
auto i = foo.begin();
std::advance(i, 20);
Run Code Online (Sandbox Code Playgroud)

什么是价值?是foo.end()

c++ stl

24
推荐指数
3
解决办法
9103
查看次数

向量中的无效迭代器

我知道擦除会在擦除点之后和之后使迭代器无效.考虑:

std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int>::iterator it = vec.end() - 1; //last element
vec.erase(vec.begin()); //shift everything one to the left, 'it' should be the new 'end()' ?
std::cout << (it == vec.end()); //not dereferencing 'it', just comparing, UB ?
Run Code Online (Sandbox Code Playgroud)

比较(而不是取消引用)无效的迭代器(it在这种情况下)是未定义的行为吗?如果没有,it == vec.end()保证是真的吗?

编辑:从顶部答案看,如果只是it一个奇异的值,这就是UB .但是在STL迭代器的上下文中,什么是单数和非奇异值?它似乎it是(或曾经)与容器相关联,因此it 非单数形式.

我很感激对此进行进一步的分析,谢谢.

c++ iterator vector undefined-behavior language-lawyer

4
推荐指数
1
解决办法
172
查看次数