Namespaces
Variants

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

From cppreference.net

void assign ( size_type count, const T & value ) ;
(1) (自 C++26 起为 constexpr)
template < class InputIt >
void assign ( InputIt first, InputIt last ) ;
(2) (自 C++26 起为 constexpr)
void assign ( std:: initializer_list < T > ilist ) ;
(3) (自 C++11 起)
(自 C++26 起为 constexpr)

替换容器中的内容。

1) 将内容替换为 count value 值的副本。
2) 将内容替换为范围 [ first , last ) 中元素的副本。

InputIt 为整数类型,此重载与重载 (1) 具有相同效果。

(C++11 前)

仅当 InputIt 满足 LegacyInputIterator 要求时,此重载才参与重载决议。

(C++11 起)
如果 first last 是指向 * this 的迭代器,则行为未定义。
3) 将内容替换为来自 ilist 的元素。

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

目录

参数

count - 容器的新大小
value - 用于初始化容器元素的值
first, last - 定义待复制元素源 范围 的迭代器对
ilist - 复制值来源的 std::initializer_list

复杂度

1) count 呈线性关系。
2) first last 之间的距离成线性关系。
3) ilist. size ( ) 呈线性关系。

示例

以下代码使用 assign std:: deque < char > 添加若干字符:

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

输出:

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

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时行为 正确行为
LWG 2209 C++98 替换操作被要求实现为
先删除所有现有元素再插入给定元素
移除了该
要求

参见

向容器赋值一个值范围
(公开成员函数)
向容器赋值
(公开成员函数)