簡體   English   中英

將std :: list用作循環列表是否安全?

[英]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的++ii++的前提條件是:

i是可引用的

這並不適用於end() ,因為它指向過去列表的最后一個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM