2014-03-29 51 views
1

我想在向量的開始位置插入一個位。我很難理解如何做到這一點。以下是我認爲我可以做到的方式:在C++向量中插入

keyRej.insert(x, inpSeq[0]); 

我不知道在x的位置放什麼東西?

+0

如果在開始時插入是常見的,並且您可以控制該類型,則可以考慮用'std :: deque'替換您的'std :: vector'。 – aschepler

+0

相關:http://en.cppreference.com/w/cpp/container/vector/insert –

回答

5

我不知道在x的位置放什麼東西?

一個迭代要插入的位置:

keyRej.insert(keyRej.begin(), inpSeq[0]); 

語義,插入的元素作爲第一個參數傳遞迭代器之前去。但是這將導致矢量的所有元素都必須移動到一個位置,並且還可能導致向量的內部數據存儲塊的重新分配。這也意味着所有的迭代器或對矢量元素的引用都是無效的。

有關更多信息,請參閱參考資料std::vector::insert

請注意,有些容器(例如std::deque),其前面的附加元素便宜,並且保持引用(但不是迭代器)有效性。

+0

我不確定.begin()會做什麼,我想要的只是向量中的inpSeq的第一位,然後在一個循環在inpSeq位之後使用push_back放置其他位。 –

+1

@MohamedAhmed你的問題沒有提到任何關於循環或將元素推入向量的背面。我回答了你問的問題。 – juanchopanza

+2

如果此操作必須經常進行,則最好將代碼更改爲在最後添加(如果append/erase總是在矢量的同一側進行)或移動到具有插入兩端時更好的性能特徵(如雙端)。 –

3

x是一個迭代器,根據您可能讀取的文檔here,新對象插入它之前。

keyRej.insert(keyRej.begin(), inpSeq[0]);