C++中的向量
时间:2020-02-23 14:30:09 来源:igfitidea点击:
C++中的Vector是类似数组的容器,可以动态改变大小。
作为C++ STL的一部分,Vector可以支持各种动态数组操作。
C++中的向量概述
向量类似于数组,存储在连续的内存位置中。
这意味着访问时间非常快。
向量使用动态分配的数组,这意味着一旦达到极限,就必须重新分配向量。
这种重新分配操作有点昂贵,这是Vector的一个缺点。
下图显示了发生Vector重新分配的场景。
在将第三个元素添加到现在为空的位置之前,现在将容量为2的原始矢量( <1,2>
)动态调整为容量4。
向量重新分配
用C++创建向量
要使用此容器,我们必须首先包含头文件" vector"。
#include <vector>
我们现在可以使用创建一个新的向量:
std::vector<type> a;
其中" <类型>"可以引用任何数据类型,例如" int"," float"," char"等。
我们还可以在初始化期间直接分配元素。
#include <vector> using namespace std; vector<int> a = {1, 2, 3, 4};
这将创建一个整数向量,初始化为 <1、2、3、4>。
所以第一个元素是1,最后一个元素是4。
现在我们有了向量,让我们看一下涉及它的一些向量操作。
C++中的向量运算
我们可以在向量容器上使用多种方法,其中一些是:
迭代器方法
- begin()->将迭代器返回到开头
- end()->将迭代器返回到末尾
- rbegin()->将反向迭代器返回到反向开始
- rend()->将反向迭代器返回到反向端点
这是显示上述方法的示例。
我们不能使用cout
直接打印向量,而必须在for
循环中访问向量的元素。
迭代器可用于此目的。
#include <iostream> #include <vector> using namespace std; int main() { vector<int> a = {1, 2, 3, 4}; for (auto it = a.begin(); it != a.end(); it++) cout << *it << " "; return 0; }
输出
1 2 3 4
同样,我们可以使用rbegin()
和rend()
反向打印矢量。
#include <iostream> #include <vector> using namespace std; int main() { vector<int> a = {1, 2, 3, 4}; for (auto it = a.rbegin(); it != a.rend(); it++) cout << *it << " "; return 0; }
输出
4 3 2 1
容量方法
- size()->返回大小
- max_size()->返回可以分配的最大大小
- resize(SIZE)->将向量调整为SIZE元素
- Capacity()->返回分配的内存容量的大小
- empty()->检查向量是否为空
#include <iostream> #include <vector> using namespace std; int main() { vector<int> a = {1, 2, 3, 4, 5, 6}; for (auto it = a.begin(); it != a.end(); it++) cout << *it << " "; cout << endl; cout << "Is the vector empty? " << (a.empty() ? "Yes" : "No") << endl; cout << "Size: " << a.size() << endl; cout << "Capacity: " << a.capacity() << endl; cout << "Maximum Size: " << a.max_size() << endl; //Let's resize the vector to 4 a.resize(4); cout << "Vector after resize(): \n"; for (auto it = a.begin(); it != a.end(); it++) cout << *it << " "; cout << endl; return 0; }
输出
1 2 3 4 5 6 Is the vector empty? No Size: 6 Capacity: 6 Maximum Size: 2305843009213693951 Vector after resize(): 1 2 3 4
元素访问方法
使用
[]
运算符。
与数组相同。at(INDEX)->访问位置INDEX处的元素
front()->访问第一个元素
back()->访问最后一个元素
#include <iostream> #include <vector> using namespace std; int main() { vector<int> a = {1, 2, 3, 4, 5, 6}; cout << "Access using []:\n"; for (unsigned int i=0; i<a.size(); i++) cout << a[i] << " "; cout << endl; cout << "Access using at():\n"; for (unsigned int i=0; i<a.size(); i++) cout << a.at(i) << " "; cout << endl; cout << "First Element: " << a.front() << endl; cout << "Last Element: " << a.back() << endl; return 0; }
输出
Access using []: 1 2 3 4 5 6 Access using at(): 1 2 3 4 5 6 First Element: 1 Last Element: 6
修饰符方法
- push_back()->在最后添加元素
- pop_back()->删除最后一个元素
- clear()->清除内容
#include <iostream> #include <vector> using namespace std; int main() { vector<int> a = {1, 2, 3, 4, 5, 6}; a.push_back(7); a.push_back(8); cout << "vector after push_back():\n"; for(unsigned int i=0; i<a.size(); i++) cout << a[i] << " "; cout << endl; a.pop_back(); cout << "vector after pop_back():\n"; for(unsigned int i=0; i<a.size(); i++) cout << a[i] << " "; return 0; }
如您所见,我们在向量上执行了一些推入和弹出操作,以动态更改大小。
这显示了向量的动态性质。
vector after push_back(): 1 2 3 4 5 6 7 8 vector after pop_back(): 1 2 3 4 5 6 7