簡體   English   中英

將 integer 轉換為 std::list 的迭代器

[英]Converting an integer to an iterator for std::list

我有下面的簡單代碼:

#include <iostream>
#include <list>
#include <iterator>
using namespace std;

int main()
{
    list<int> ints = { 3, 6, 1, 5, 8 };
    int index;

    index = 2;
    std::list<int>::iterator it = ints.begin() + index;
    cout << "Element at index " << index << " is " << *it << '\n';

    return 0;
}

編譯時,它說:

錯誤:'operator+' 不匹配(操作數類型是 'std::__cxx11::list::iterator' {aka 'std::_List_iterator'} 和 'int')
std::list::iterator it = ints.begin() + index;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我理解編譯器想說什么,但我不確定如何解決它。 如何將int轉換為iterator並獲取該索引處的元素? 我確實尋找過類似的問題,但他們中的大多數都在尋求相反方向的轉換,這可以使用std::distance來完成,而其余的則是針對不同的容器。

謝謝你的幫助!

使用std::next

如果您將distance視為兩個迭代器之間的運算符- ,那么nextprev和 Advance 分別是迭代器和advance之間的+-+=
這些函數旨在以相同的方式處理所有迭代器,即使不同迭代器的操作復雜性不同。 對於使用“前向迭代器”的std::list ,這些都是線性的。 對於使用“隨機訪問迭代器”的std::vector ,這些都是常量。

將 integer 轉換為 std::list 的迭代器

整數和迭代器是完全不同的概念,因此尚不清楚這種轉換的含義。 如何將椰子轉化為及物性?

...並獲取該索引處的元素?

現在,這更有意義了。 然而,列表元素沒有索引。 但大概通過索引i ,您的意思是從頭開始的第i個(基於零的)連續元素。

標准庫有一個 function : std::next 這樣做(使用非隨機訪問迭代器)是在循環中為給定的重復次數增加迭代器。 直觀地說,這種操作的漸近復雜度是線性的。

暫無
暫無

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

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