在C++中,std::vector 类的 assign 方法用于在向量中设置新内容,替换其当前内容。以下是详细的解释:

基本用法

assign 方法有几种重载形式,允许你用不同的方式设置 vector 的内容:

  1. assign(size_type n, const T& val):将向量的内容替换为 nval 的副本。
  2. assign(InputIterator first, InputIterator last):使用两个迭代器 firstlast 指定的范围来替换向量的内容。
  3. assign(initializer_list<T> il):使用初始化列表 il 中的元素来替换向量的内容。

特点和注意事项

  • assign 方法改变向量的大小和内容。
  • 如果新大小大于当前大小,会创建新元素。如果新大小小于当前大小,则多余的元素会被销毁。
  • 使用迭代器范围重载时,范围 [first, last) 应有效且不应指向同一 vector 中的元素。
  • 分配新内容可能导致所有现有的迭代器、引用和指针失效。

示例代码

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
26
27
28
29
30
#include <iostream>
#include <vector>

int main() {
std::vector<int> vec;

// 使用初始值赋值
vec.assign(4, 100);
for (int i : vec) {
std::cout << i << " "; // 输出: 100 100 100 100
}
std::cout << "\n";

// 使用迭代器赋值
std::vector<int> anotherVec{1, 2, 3, 4, 5};
vec.assign(anotherVec.begin(), anotherVec.end());
for (int i : vec) {
std::cout << i << " "; // 输出: 1 2 3 4 5
}
std::cout << "\n";

// 使用初始化列表赋值
vec.assign({10, 20, 30});
for (int i : vec) {
std::cout << i << " "; // 输出: 10 20 30
}
std::cout << "\n";

return 0;
}

在这个例子中,我们展示了如何使用不同的 assign 方法来设置 vector 的内容。每种方法都清除原有内容,并根据提供的新值设置 vector


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。