C++标准模板库(STL)中的容器是编程中非常重要的部分,它们用于存储数据元素集合。以下是STL中最常用的容器vector动态数组的详细介绍:
vector
(动态数组)
vector
是一个能够存储任意类型对象的序列容器,可以动态地增长和缩小。它提供随机访问迭代器,因此可以高效地访问容器中的任意元素。
以下是vector的C++代码简单实现:
#include <iostream>
#include <vector>
using namespace std;
int main() {
//定义一个int类型的动态数组vec
vector<int> vec;
// 向vector中添加元素
int a,b,c;
cin >> a >> b >> c;
vec.push_back(a);
vec.push_back(b);
vec.push_back(c);
// 访问vector中的元素
cout << "第一个元素: " << vec[0] << endl;
// 遍历vector
for (int i = 0; i < vec.size(); ++i) {
cout << "元素 " << i << ": " << vec[i] << endl;
}
return 0;
}
以下是插入和删除 vector
中元素的基本方法:
插入元素
-
使用
push_back()
push_back()
成员函数在vector
的末尾插入一个新的元素,并增加vector
的大小。vector<int> vec; vec.push_back(10); // vec 变为 {10} vec.push_back(20); // vec 变为 {10, 20}
-
使用
insert()
insert()
成员函数提供了更多的灵活性,它可以在vector
的指定位置插入一个或多个元素。它需要两个参数:一个迭代器,指定插入位置;以及要插入的元素或元素的范围。vector<int> vec = {10, 20}; vec.insert(vec.begin() + 1, 15); // vec 变为 {10, 15, 20} // 插入一个元素范围 vector<int> more_elements = {30, 40}; vec.insert(vec.end(), more_elements.begin(), more_elements.end()); // vec 变为 {10, 15, 20, 30, 40}
注意,
insert()
可能会导致重新分配vector
的内部存储空间,以容纳更多的元素,这可能会影响性能(特别是当vector
很大时)。
删除元素
-
使用
pop_back()
pop_back()
成员函数移除vector
的最后一个元素,并减少vector
的大小。vector<int> vec = {10, 20, 30}; vec.pop_back(); // vec 变为 {10, 20}
-
使用
erase()
erase()
成员函数移除vector
中的一个或多个元素。它需要一个迭代器(或迭代器范围),指定要删除的元素。vector<int> vec = {10, 20, 30, 40, 50}; vec.erase(vec.begin() + 2); // 删除第三个元素(值为30),vec 变为 {10, 20, 40, 50} // 删除一个元素范围 vec.erase(vec.begin() + 1, vec.begin() + 3); // 删除第二个和第三个元素,vec 变为 {10, 50}
-
使用
clear()
clear()
成员函数移除vector
中的所有元素,使其大小变为 0。但它不会改变vector
的容量(即内部存储空间的大小)。vector<int> vec = {10, 20, 30}; vec.clear(); // vec 变为空
这些是 vector
中插入和删除元素的基本方法。在使用这些方法时,请注意它们对 vector
大小、容量和迭代器有效性的影响。
修改vector中的元素
要修改 vector
中的元素,可以直接通过下标(索引)访问该元素,并对其赋值。下标从0开始。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 修改第三个元素(索引为2)
vec[2] = 10;
// 输出修改后的vector
for (int i = 0; i < vec.size(); ++i) {
cout << vec[i] << " ";
}
// 输出:1 2 10 4 5
return 0;
}
遍历vector中的元素
遍历 vector
中的元素可以通过多种方式完成,包括使用下标、迭代器等。
使用下标
这种方法在上面的例子中已经展示过了。它适用于你知道要遍历的元素的数量或范围时。
使用迭代器
迭代器提供了一种通用的方法来访问容器中的元素,而不需要关心容器的具体实现。
#include <iostream>
#include <vector>
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 使用迭代器遍历vector
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
// 输出:1 2 3 4 5
return 0;
}