这是我在 C++11 标准下运行的两段代码。我预计迭代器的后递减会产生相同的效果,但是这两段代码产生完全不同的结果。我的理解哪里出了问题?
list<int> L;
int main() {
L.push_back(0);
L.push_front(1);
auto it = L.begin();
for (int i = 2; i <= 5; i++) {
L.insert(it--, i);
}
for (auto num : L) {
printf("%d ", num);
}
// 2 5 0 4 1 3
}
Run Code Online (Sandbox Code Playgroud)
list<int> L;
int main() {
L.push_back(0);
L.push_front(1);
auto it = L.begin();
for (int i = 2; i <= 5; i++) {
L.insert(it, i);
it--;
}
for (auto num : L) {
printf("%d ", num);
}
// 5 4 3 2 1 0
}
Run Code Online (Sandbox Code Playgroud)
L.insert(it, i);
it--;
Run Code Online (Sandbox Code Playgroud)
这会在 之前插入一个节点it,然后it向后移动到插入的节点。
L.insert(it--, i);
Run Code Online (Sandbox Code Playgroud)
操作顺序被交换:它在调用之前向后移动迭代器。 insert()没有可以移回的节点,因此会导致未定义的行为。
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |