![](/img/trans.png)
[英]Converting std::list<int> iterator to an CString (MFC)
[英]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
視為兩個迭代器之間的運算符-
,那么next
、 prev
和 Advance 分別是迭代器和advance
之間的+
、 -
和+=
。
這些函數旨在以相同的方式處理所有迭代器,即使不同迭代器的操作復雜性不同。 對於使用“前向迭代器”的std::list
,這些都是線性的。 對於使用“隨機訪問迭代器”的std::vector
,這些都是常量。
將 integer 轉換為 std::list 的迭代器
整數和迭代器是完全不同的概念,因此尚不清楚這種轉換的含義。 如何將椰子轉化為及物性?
...並獲取該索引處的元素?
現在,這更有意義了。 然而,列表元素沒有索引。 但大概通過索引i
,您的意思是從頭開始的第i
個(基於零的)連續元素。
標准庫有一個 function : std::next
。 這樣做(使用非隨機訪問迭代器)是在循環中為給定的重復次數增加迭代器。 直觀地說,這種操作的漸近復雜度是線性的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.