就在今天,我考完试就急匆匆的回来了,在复习期间,一位佬给予了我很大的鼓励,并十分期待我的作品,再次感谢#qystca#。原来我是想放弃更新的,但qystca佬与粉丝们都以关注或评论来激励我,非常Thanks♪(・ω・)ノ。
回归正题,事先说明一下,由于看第二课没什么好更新的了,我就讲一下新知识点——vector容器。
在C++中,vector
是标准模板库(STL)中非常重要的容器之一,它提供了动态数组的功能。以下是关于C++中vector
容器的详细介绍:
一、基本概念
-
动态数组
-
vector
可以看作是一个能够自动调整大小的数组。它在内部以数组的形式存储元素,当元素数量超过当前分配的内存空间时,vector
会自动分配更大的内存空间来存储更多的元素。例如,初始时vector
可能分配了大小为10的内存空间来存储整数元素,当添加第11个元素时,它会重新分配更大的内存(如大小为20),并将原来的元素复制到新的内存空间,然后添加新元素。
-
-
模板类
-
vector
是一个模板类,可以存储任意类型的数据。例如,vector<int>
表示存储整数的vector
,vector<double>
表示存储双精度浮点数的vector
,还可以存储自定义的数据类型,如vector<MyClass>
,其中MyClass
是用户定义的类。
-
二、主要成员函数
-
构造函数
-
vector()
:默认构造函数,创建一个空的vector
。 -
vector(size_type n)
:创建一个包含n
个默认初始化元素的vector
。例如,vector<int> v(5);
会创建一个包含5个值为0的整数元素的vector
,因为整数的默认初始化值是0。 -
vector(size_type n, const T& val)
:创建一个包含n
个值为val
的元素的vector
。如vector<int> v(5, 10);
会创建一个包含5个值为10的整数元素的vector
。 -
vector(const vector& v)
:拷贝构造函数,创建一个与v
相同的vector
。
-
-
元素访问
-
operator[]
:通过下标访问元素,如v[2]
可以获取或修改vector
中第3个元素的值。需要注意的是,如果下标越界,程序的行为是未定义的。 -
at()
:也是通过下标访问元素,但它会进行边界检查。如果下标越界,会抛出out_of_range
异常。例如,v.at(2)
安全地获取第3个元素的值。 -
front()
:返回第一个元素的引用。 -
back()
:返回最后一个元素的引用。
-
-
迭代器
-
begin()
:返回指向vector
第一个元素的迭代器。 -
end()
:返回指向vector
最后一个元素之后位置的迭代器。这两个函数常用于遍历vector
中的元素,例如:vector<int> v = {1, 2, 3, 4, 5}; for (auto it = v.begin(); it != v.end(); ++it) { cout << *it << " "; }
这段代码会输出
vector
中的所有元素。
-
-
容量相关函数
-
size()
:返回vector
中当前元素的数量。 -
capacity()
:返回vector
当前分配的内存可以容纳的元素数量。这个值通常大于或等于size()
,因为vector
会预先分配一些额外的内存以提高添加元素的效率。 -
empty()
:判断vector
是否为空,如果为空返回true
,否则返回false
。 -
resize(size_type n)
:改变vector
的大小。如果新大小大于当前大小,会添加默认初始化的元素;如果新大小小于当前大小,会删除多余的元素。 -
reserve(size_type n)
:预先分配至少n
个元素的内存空间,这可以减少在添加大量元素时的内存重新分配次数,提高效率。
-
-
修改器
-
push_back(const T& val)
:在vector
的末尾添加一个值为val
的元素。例如,v.push_back(10);
会将整数10添加到vector
的末尾。 -
pop_back()
:删除vector
的最后一个元素。 -
insert(iterator pos, const T& val)
:在迭代器pos
指向的位置插入一个值为val
的元素。例如,v.insert(v.begin() + 2, 20);
会在vector
的第3个位置插入值为20的元素。 -
erase(iterator pos)
:删除迭代器pos
指向的元素。也可以使用erase(iterator first, iterator last)
删除从first
到last
(不包括last
)之间的所有元素。 -
clear()
:删除vector
中的所有元素,但不会释放内存。
-
三、使用示例
#include<bits/stdc++.h>
int main() {
// 创建并初始化vector
vector<int> v = {1, 2, 3, 4, 5};
// 访问元素
cout << "第一个元素:" << v.front() << endl;
cout << "最后一个元素:" << v.back() << endl;
cout << "第3个元素:" << v[2] << endl;
// 添加元素
v.push_back(6);
cout << "添加元素后,vector的大小:" << v.size() << endl;
// 插入元素
v.insert(v.begin() + 2, 10);
cout << "插入元素后,vector的内容:";
for (int i = 0; i < v.size(); ++i) {
cout << v[i] << " ";
}
cout << endl;
// 删除元素
v.erase(v.begin() + 2);
cout << "删除元素后,vector的内容:";
for (int i = 0; i < v.size(); ++i) {
cout << v[i] << " ";
}
cout << endl;
return 0;
}
需要注意的是,在c++的正式版本中,vector容器只能在c++11以上版本运行。