[英]Is it safe to use std::list as a circular list?
那么在標准中定義了增加或減少end()迭代器? 在linux上,begin()被實現為end()++。
#include <list>
#include <iostream>
int main()
{
std::list<int> numbers;
for (int i = 0; i < 10; i++)
numbers.push_back(i);
auto it = numbers.begin();
int count = 3;
while (count)
{
std::cout << *it++;
if (it == numbers.end())
{
++it; // is this ok ???
--count;
std::cout << '\n';
}
}
}
那么每個平台上的輸出總是一樣的嗎?
輸出:
0123456789
0123456789
0123456789
從任何標准C ++庫容器的end()
返回的迭代器遞增會導致未定義的行為。 由於std::list<T>
大多數實現共有一個實現細節,因此可以增加list.end()
工作量,但不能保證這樣做。
不,這不好。 std::list
迭代器是BidirectionalIterator ,它是對ForwardIterator的改進。 ForwardIterator的++i
和i++
的前提條件是:
i
是可引用的
這並不適用於end()
,因為它指向過去列表的最后一個項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.