名稱空間
變體
操作

std::vector<T,Allocator>::assign

來自 cppreference.com
< cpp‎ | 容器‎ | vector
 
 
 
 
void assign( size_type count, const T& value );
(1) (C++20 起為 constexpr)
template< class InputIt >
void assign( InputIt first, InputIt last );
(2) (C++20 起為 constexpr)
void assign( std::initializer_list<T> ilist );
(3) (C++11 起)
(C++20 起為 constexpr)

替換容器的內容。

1) 將內容替換為 countvalue 的副本。
2) 用範圍 [firstlast) 中的元素副本替換內容。
如果任一引數是 *this 的迭代器,則行為是未定義的。

如果 InputIt 是整型,則此過載與過載 (1) 具有相同的效果。

(C++11 前)

此過載僅在 InputIt 滿足 LegacyInputIterator 時才參與過載決議。

(C++11 起)
3) 將內容替換為 ilist 中的元素。

所有迭代器(包括 end() 迭代器)以及所有對元素的引用都將失效。

目錄

[編輯] 引數

count - 容器的新大小
value - 用於初始化容器元素的數值
first, last - 定義要複製的元素的源 範圍 的迭代器對
ilist - std::initializer_list,從中複製值

[編輯] 複雜度

1) 關於 count 的線性複雜度。
2) 關於 firstlast 之間距離的線性複雜度。
3) 關於 ilist.size() 的線性複雜度。

[編輯] 示例

以下程式碼使用 assignstd::vector<char> 添加了幾個字元

#include <vector>
#include <iostream>
#include <string>
 
int main()
{
    std::vector<char> characters;
 
    auto print_vector = [&]()
    {
        for (char c : characters)
            std::cout << c << ' ';
        std::cout << '\n';
    };
 
    characters.assign(5, 'a');
    print_vector();
 
    const std::string extra(6, 'b');
    characters.assign(extra.begin(), extra.end());
    print_vector();
 
    characters.assign({'C', '+', '+', '1', '1'});
    print_vector();
}

輸出

a a a a a
b b b b b b
C + + 1 1

缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 2209 C++98 替換操作要求實現為
擦除所有現有元素,然後插入給定元素
移除了冗餘要求
要求

[編輯] 參閱

將一個範圍的值賦給容器
(public member function) [編輯]
將值賦給容器
(public member function) [編輯]