2012-04-01 91 views
0

我有一個保留內存的空容器。我的函數(算法)不需要容器,只有迭代器才能開始。如何在這個函數中添加元素到容器中?我需要分配內存並調用構造函數,但是如何在迭代器引用的位置調用構造函數?如何將元素添加到只有迭代器的容器?

+0

請解釋你爲什麼只有一個迭代器。大多數迭代器不會讓你改變容器;你必須有權訪問容器。順便說一句,迭代器和常量迭代器之間的區別在於是否可以更改元素,而不是容器。 – 2012-04-01 19:19:19

+0

另外,**請標記正確的答案您的問題。** – 2012-04-01 19:19:59

+0

這是一個要求 – user1290126 2012-04-01 19:27:15

回答

4

通常使用類似於std::inserter_iterator的東西。但是,這通常不會消除對容器的指針或引用的需求 - 它只是將該引用存儲在迭代器本身內部。

如果你有一個預置的迭代器類型,這沒有好處。如果你像普通的算法那樣只需要使用一些使用迭代器接口插入到集合中的東西,它就可以很好地工作。

+0

std :: inserter_iterator必須帶一個容器。但它不是由算法採取的 – user1290126 2012-04-01 19:00:57

+0

當您創建迭代器時,將容器提供給'inserter_iterator',這是在函數被調用之前。之後,你只需要迭代器。 – 2012-04-01 19:16:52

+0

所以,我只在insert_iterator的容器中添加了一個元素。然後出現一個錯誤。 insert_iterator應該指向哪裏,開始還是結束?我應該增加它嗎? – user1290126 2012-04-01 19:33:49

2

如果沒有引用/指向該容器的指針,則不能將元素插入到容器中。

但是,您可以覆蓋一個元素(假設您沒有const_iterator)。例如:

*it = T(params); 

其中T是有問題的類型。

3

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)); 
} 
+0

我不能使用容器!我只有迭代器。 – user1290126 2012-04-01 18:59:48

+2

@ user1290126:看起來更好。 'std :: copy'不知道關於'my_vector'的任何信息,它只是傳遞一個迭代器,但它仍然會複製到向量中,隨着它的發展而擴展它。這是「輸出迭代器」的魔力。這裏'std :: back_insert(my_vector)'創建一個迭代器,當它被寫入時附加到vector上。 – 2012-04-01 19:02:28

+0

@ user1290126你有什麼樣的迭代器?一個insert_iterator能夠插入數據,因爲它知道容器,但是如果你得到的只是一個普通的forward_iterator,那麼你所問的問題更類似於「我如何僅使用指向一個指針的數組來調整數組元素「 - 答案只是」你不能「 - 通常,函數的調用者負責決定使用哪種類型的迭代器,以及該迭代器是否能夠修改容器。 – 2012-04-01 19:04:29

3

你不能改變容器,僅具有橫動迭代;不過,您可以改用插入迭代器。

編輯: 如果你保留內存,你必須知道它將包含多少元素。然後,您可以在傳入函數之前添加空元素,並使用迭代器填充它們,並將其遞增。之後,你可以返回這個迭代器,它將指向有用數據結束的位置。

+0

不是個好主意,因爲我知道可能的最大數量的元素,並且如果容器是關聯的,那麼這樣的空元素可能不會發生在末尾 – user1290126 2012-04-01 19:19:21

相關問題