我處於這種情況,我無法使用vector
,因爲我使用了&element[x]
,然後添加了更多項目,以使指針失效。問題是std::list
似乎沒有超載operator []
,也沒有提供at()
方法。因此,我看到我可以模擬at()
的唯一方法是使用迭代器。有沒有更好的方法來做到這一點?[]運營商爲std ::列表?
1
A
回答
9
你應該重新考慮你的設計。
試圖仿效operator[]
或at
爲std::list
會導致性能的災難:這些操作將需要O(N),而不是O(1)時間爲std::list::iterator
是雙向迭代器,而不是隨機訪問迭代器。因此,如果您現在遍歷容器併爲每個元素調用[]
或at
,則會導致O(N * N)而不是O(N)。
這就是爲什麼這些操作不是由std::list
提供。
+0
爲了更加準確,'std :: list'迭代器是**雙向的**不轉發。 – Blastfurnace
+0
@Blastfurnace絕對,修復它 –
4
#include <iterator>
std::list<int> l;
std::list<int>::iterator it = l.begin();
std::advance(it, 37);
對於非隨機訪問迭代(像那些list
),這將需要當然線性時間。
0
沒有std :: list是一個鏈表。不可能直接訪問一個元素。它從頭開始重複元素的唯一可能性。
相關問題
- 1. 運營商和列表F#
- 2. 運營商,該列表
- 3. Python列表和運營商
- 4. 三元運營商的std :: index_sequence
- 5. 比較運營商的std ::功能
- 6. 的std ::向前和運營商()
- 7. 空 - 結合運營商和運營商&&
- 8. 運營商的情況下運營商
- 9. 或運營商與三元運營商
- 10. 的JavaScript +運營商VS - 運營商
- 11. mvc3運營商的下拉列表
- 12. *(C++)運營商爲了
- 13. 一系列&&/||運營商
- 14. 奇怪的行爲:SQL和運營商,在多個運營商
- 15. jQuery @運營商?
- 16. 令運營商
- 17. 比較運營商(飛船運營商)如何在三元運營商處理
- 18. 重載運營商爲了
- 19. 爲盈方各運營商
- 20. 錯誤:不對應的 '運營商>>' 爲給std :: cin
- 21. REGEXP和運營商。+
- 22. FQL像運營商
- 23. Javascript:?運營商
- 24. R%*%運營商
- 25. instanceof運營商
- 26. Bigint +運營商
- 27. Groovy *。運營商
- 28. '運營商='
- 29. ??運營商system.DBNull
- 30. 運營商
會std :: deque足夠嗎? – PeskyGnat
您可以使用矢量和'my_iterator = my_vector.insert(my_iterator,VALUE);';向量在一般情況下提供良好的性能,即使元素要被移位。 – Benoit