![](/img/trans.png)
[英]std::deque: How do I get an iterator pointing to the element at a specified index?
[英]How do I get index of element in std::deque
我有一個雙端隊列,我有一個屬於雙端隊列的對象。
std::deque<Item> items;
// full deque with objects
// ...
Item &item = items[5];
現在我想在deque中獲取該元素的索引:
size_t index = &item - &*m_items.begin();
我希望索引等於5,但我得到的東西比deque的大小要大。
當然,我可以通過deque查找我的對象,但是有可能在O(1)中得到元素的索引嗎?
不能計算一個元素的索引中std::deque<T>
基於其如在元件地址std::deque<T>
中不連續的存儲器存儲。 充其量,您可以使用迭代器並從該位置減去begin()
迭代器。 但請注意,向std::deque<T>
添加或刪除元素會使所有迭代器無效,即使指針或對象的引用未失效也是如此。
這取決於沒有引用失效,但您可以使用std::find_if
按地址查找元素,然后使用std::distance
來獲取索引。
Item &item = items[5];
Item* p = &item;
auto it = std::find_if(items.begin(),
items.end(),
[p](const Item& i) {return p == &i;});
auto idx = std::distance(items.begin(), it);
更容易的選擇是保持迭代器而不是引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.