我有一個保留內存的空容器。我的函數(算法)不需要容器,只有迭代器才能開始。如何在這個函數中添加元素到容器中?我需要分配內存並調用構造函數,但是如何在迭代器引用的位置調用構造函數?如何將元素添加到只有迭代器的容器?
回答
通常使用類似於std::inserter_iterator
的東西。但是,這通常不會消除對容器的指針或引用的需求 - 它只是將該引用存儲在迭代器本身內部。
如果你有一個預置的迭代器類型,這沒有好處。如果你像普通的算法那樣只需要使用一些使用迭代器接口插入到集合中的東西,它就可以很好地工作。
std :: inserter_iterator必須帶一個容器。但它不是由算法採取的 – user1290126 2012-04-01 19:00:57
當您創建迭代器時,將容器提供給'inserter_iterator',這是在函數被調用之前。之後,你只需要迭代器。 – 2012-04-01 19:16:52
所以,我只在insert_iterator的容器中添加了一個元素。然後出現一個錯誤。 insert_iterator應該指向哪裏,開始還是結束?我應該增加它嗎? – user1290126 2012-04-01 19:33:49
如果沒有引用/指向該容器的指針,則不能將元素插入到容器中。
但是,您可以覆蓋一個元素(假設您沒有const_iterator
)。例如:
*it = T(params);
其中T
是有問題的類型。
C + +有一個insert_iterator的概念,這是我以爲你後?
例如:
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
int my_array[] = { 1,2,3,4,5,6,7,8,9,10 };
std::vector<int> my_vector;
std::copy(std::begin(my_array),
std::end(my_array),
std::back_inserter(my_vector));
}
我不能使用容器!我只有迭代器。 – user1290126 2012-04-01 18:59:48
@ user1290126:看起來更好。 'std :: copy'不知道關於'my_vector'的任何信息,它只是傳遞一個迭代器,但它仍然會複製到向量中,隨着它的發展而擴展它。這是「輸出迭代器」的魔力。這裏'std :: back_insert(my_vector)'創建一個迭代器,當它被寫入時附加到vector上。 – 2012-04-01 19:02:28
@ user1290126你有什麼樣的迭代器?一個insert_iterator能夠插入數據,因爲它知道容器,但是如果你得到的只是一個普通的forward_iterator,那麼你所問的問題更類似於「我如何僅使用指向一個指針的數組來調整數組元素「 - 答案只是」你不能「 - 通常,函數的調用者負責決定使用哪種類型的迭代器,以及該迭代器是否能夠修改容器。 – 2012-04-01 19:04:29
你不能改變容器,僅具有橫動迭代;不過,您可以改用插入迭代器。
編輯: 如果你保留內存,你必須知道它將包含多少元素。然後,您可以在傳入函數之前添加空元素,並使用迭代器填充它們,並將其遞增。之後,你可以返回這個迭代器,它將指向有用數據結束的位置。
不是個好主意,因爲我知道可能的最大數量的元素,並且如果容器是關聯的,那麼這樣的空元素可能不會發生在末尾 – user1290126 2012-04-01 19:19:21
- 1. 將迭代器的所有元素添加到列表
- 2. 將迭代器返回到STL容器中的元素
- 3. 如何將簡單的DOM元素添加到ExtJS容器中?
- 4. 如果容器元素的內容比容器元素高,則將類添加到容器中
- 5. 使用元素鍵迭代STL容器
- 6. 將迭代器添加到集合中
- 7. 如何分離迭代器的元素?
- 8. 迭代添加元素到列表
- 9. 如果類只存在於父容器中,則將類添加到子元素
- 10. 使用迭代器將std :: vector添加到自己的元素中
- 11. 如何將元素添加爲html容器中的列堆棧?
- 12. EXT JS - 在添加到容器的任何元素上添加偵聽器
- 13. 如何添加具有迭代屬性的元素?
- 14. 將元素追加到div容器內只在parentcontainer中
- 15. 將循環中的元素添加到容器中(lifetime)
- 16. 使用std :: remove_reference獲取STL容器的元素迭代器
- 17. 如何在ServiceStack Markdown中將foreach迭代器添加到MarkdownPage?
- 18. 如何將查詢過濾器添加到迭代跟蹤板?
- 19. 如何將Foo *迭代器添加到Foo矢量中?
- 20. 將元素添加到Java LinkedList的末尾,同時迭代它
- 21. 如何在新的迭代器中產生迭代器中的元素?
- 22. 從列表中刪除元素只有迭代器
- 23. 如何將Redis添加到Docker容器?
- 24. 將元素添加到非包裝容器,在左側溢出
- 25. 將元素添加到水平佈局而不適合容器
- 26. 使用迭代器擦除容器元素
- 27. C++ STL關聯容器:從元素獲取迭代器?
- 28. 將元素添加到數組,同時迭代它
- 29. 迭代在jQuery中並將屬性添加到每個元素
- 30. 將元素添加到數組迭代在foreach語句中php
請解釋你爲什麼只有一個迭代器。大多數迭代器不會讓你改變容器;你必須有權訪問容器。順便說一句,迭代器和常量迭代器之間的區別在於是否可以更改元素,而不是容器。 – 2012-04-01 19:19:19
另外,**請標記正確的答案您的問題。** – 2012-04-01 19:19:59
這是一個要求 – user1290126 2012-04-01 19:27:15