public member function
<vector>

std::vector::assign

range (1)
template <class InputIterator>  void assign (InputIterator first, InputIterator last);
fill (2)
void assign (size_type n, const value_type& val);
range (1)
template <class InputIterator>  void assign (InputIterator first, InputIterator last);
fill (2)
void assign (size_type n, const value_type& val);
initializer list (3)
void assign (initializer_list<value_type> il);
Assign vector content
為 vector 重新賦值,替換其當前內容,並相應地修改其 size

在*範圍版本* (1) 中,新內容是透過從 firstlast 之間的序列的每個元素構造而來的元素,順序與原序列相同。

在*填充版本* (2) 中,新內容是 n 個元素,每個元素都初始化為 val 的副本。

如果發生重新分配,則使用內部分配器分配所需的儲存。
在*範圍版本* (1) 中,新內容是透過從 firstlast 之間的序列的每個元素構造而來的元素,順序與原序列相同。

在*填充版本* (2) 中,新內容是 n 個元素,每個元素都初始化為 val 的副本。

在*初始化列表版本* (3) 中,新內容是初始化列表引數值的副本,順序與原列表相同。

如果發生重新分配,則使用內部分配器(透過其特徵)來分配釋放儲存。它還用於銷燬所有現有元素,並構造新元素。

容器中原有的所有元素都會被*銷燬*,並被新構造的元素替換(不進行元素賦值)。

如果新 vector 的 size 超出了當前 vector 的 capacity,則會(僅在此條件下)自動重新分配已分配的儲存空間。

引數

first, last
指向序列中初始和結束位置的輸入迭代器。使用的範圍是[first,last),它包括firstlast之間的所有元素,包括first指向的元素,但不包括last指向的元素。
函式模板引數InputIterator應該是指向某個型別的元素的輸入迭代器型別,該型別可以轉換為value_type物件的型別的元素。
n
容器的新大小。
成員型別size_type是一種無符號整型型別。
val
用於填充容器的值。容器中的每個 n 個元素都將初始化為該值的副本。
成員型別value_type是容器中元素的型別,在vector中定義為其第一個模板引數(T).
il
一個 initializer_list 物件。編譯器將自動從初始化列表宣告器建立此類物件。
成員型別value_type是容器中元素的型別,在vector中定義為其第一個模板引數(T).

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// vector assign
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> first;
  std::vector<int> second;
  std::vector<int> third;

  first.assign (7,100);             // 7 ints with a value of 100

  std::vector<int>::iterator it;
  it=first.begin()+1;

  second.assign (it,first.end()-1); // the 5 central values of first

  int myints[] = {1776,7,4};
  third.assign (myints,myints+3);   // assigning from array.

  std::cout << "Size of first: " << int (first.size()) << '\n';
  std::cout << "Size of second: " << int (second.size()) << '\n';
  std::cout << "Size of third: " << int (third.size()) << '\n';
  return 0;
}
輸出
Size of first: 7
Size of second: 5
Size of third: 3


複雜度

對初始和最終大小(銷燬、構造)是線性的。
另外,在*範圍版本 (1)* 中,如果InputIterator至少不是前向迭代器類別(即,它只是一個輸入迭代器),則無法提前確定新容量,並且該操作會增加額外的對數複雜度(與新大小相關)(增長過程中的重新分配)。

迭代器有效性

所有與該容器相關的迭代器、指標和引用都將失效。

資料競爭

所有複製的元素都會被訪問。
容器被修改。
所有包含的元素都被修改。

異常安全

基本保證:如果丟擲異常,容器仍處於有效狀態。
如果不支援帶有適當引數的 allocator_traits::construct 進行元素構造,或者指定的範圍由[first,last)無效,則會導致未定義行為

另見