2015-01-26 72 views
1

STL容器的插入方法有兩個參數:一個指示插入位置的迭代器和一個要插入的值。 瞭解insert方法定義了新插入的值將插入到迭代器當前引用的值之前。C++向量和插入

爲什麼不適合改爲定義insert將新值放在當前值之後?

+1

根據我的猜測,可能會涉及'size_t'和索引0。在0處插入需要'size_t'取值爲-1(而不是無符號),假設向量迭代器本質上是包裝索引(這對於底層數組是有意義的)。如果你認爲'std :: vector :: insert'是「insert at ...」,那麼這個功能就有意義了。 – Conduit 2015-01-26 18:52:40

+4

如果這是你的方式,你永遠不能插入位置0,因爲在列表開始之前沒有任何值。 – 2015-01-26 18:52:48

回答

0

新插入的方法將處於迭代器指向的位置,其他所有內容都將被「推到下一個位置」。

如果你把它過去的當前項目,那麼你實際插入的迭代器+ 1

+0

這樣想吧。如果我告訴你在矢量中做出第五項,你會不會把它放在第六個對的位置? – 2015-01-26 18:54:24

0

的迭代器指向前插入新項目的項目。從語義上講,您正在提供新項目的位置。

如果相反的項目插入後,你怎麼能插入在載體的開始作爲第一項?

使用當前的方案,項目可以插入任何地方。但根據你提出的替代方案,如果沒有特殊情況,你不能插入。

0
  1. ,因爲你不能將能夠在一開始就受到寫入執行插入:

    vect.insert(vect.begin(), value); 
    
  2. ,因爲你不能將能夠通過在年底前輕鬆執行插入寫

    vect.insert(vect.end(), value); 
    

執行上述操作的新值後實際上是在開始/結束(如評估d之後,插入之前的迭代器可能會失效),就像代碼所說的那樣。如果您以任何其他方式定義insert,則必須與+1/-1混淆。