STL-vector-assign(分配)

作用:将值赋给容器

https://cppreference.cn/w/cpp/container/vector/assign

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

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

1) 用 count 个 value 的副本替换内容,并重新设置vector长度为count

2) 用范围 [firstlast) 中的副本替换内容。如果任一参数是 *this 中的迭代器,则行为未定义。//姑且没看懂呢

如果 InputIt 是一个整型,则此重载的效果与重载 (1) 相同。(直到 C++11)
只有当 InputIt 满足 LegacyInputIterator 时,此重载才会参与重载解析。(自 C++11 起)

3) 用来自初始化列表 ilist 的元素替换内容。//用列表替换容器内容,并重新设置vector长度为列表长度

所有迭代器(包括 end() 迭代器)以及对元素的所有引用都将失效。//?,没看懂

参数

count容器的新大小
value用于初始化容器元素的值
first, last要复制元素的范围
ilist要复制值的初始化列表

复杂度(线性)

1) count 的线性。

2) first 和 last 之间距离的线性。

3) ilist.size() 的线性。

示例

以下代码使用 assign 将几个字符添加到 std::vector<char>

/*
* ClassName: ${NAME}
 * package: ${PACKAGE_NAME}
 * Description:
 * @Author: innno
 * @Create: 2024/2/27 - 21:54
 * @Version: v1.0
 */
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    vector<char> vec={'a','b','c','a','b','c','a','b','c'};
    auto print_vec = [&]()
    {
        for (const char& c : vec)
        {
            cout << c << " ";
        }
        cout << "\n";
    };
    vec.assign(5, 'a');
    print_vec();
    vector<char> vec1={'1','2','4','6','9'};
    vec.assign(vec1.begin(), vec1.end());
    print_vec();
    const string extra(6, 'b');
    vec.assign(extra.begin(), extra.end());
    print_vec();
    vec.assign({'C', '+', '+', '1', '1'});
    print_vec();
    return 0;
}

输出:

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部