本文翻译自: C++ Vectors
在C++中,vector被用于存储相似数据类型的元素。然而,与数组不同,一个vector的大小是可以动态增加的。
这意味着,每当我们需要时,我们都可以在执行程序期间改变vector的大小。
vector是C++标准模板库的一部分,为了使用vector,我们需要包含以下头文件:
#include <vector>
1.C++ vector的声明
一旦我们包含了头文件,接下来就是我们在C++中声明一个vector:
std::vector<T> vector_name;
类型参数T指出了vector的类型,它可以是任何的原始数据类型,比如int、char、float。
由于vector的大小能够动态增加,因此我们在这里不指定其大小。
2.C++ vector初始化
有不同的方式去初始化C++中的vector:
(1) 方法一:
// Initializer list
vector<int> vector1 = {1, 2, 3, 4, 5};
// Uniform initialization
vector<int> vector2 {1, 2, 3, 4, 5};
(2) 方法二:
vector<int> vector3(5, 12);
在这个例子中,5是vector的大小,而12则是vector中的值。上述代码的效果等同于:
vector<int> vector3 = {12, 12, 12, 12, 12};
3.实例: C++ vector初始化
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// initializer list
vector<int> vector1 = {1, 2, 3, 4, 5};
// uniform initialization
vector<int> vector2{6, 7, 8, 9, 10};
// method 3
vector<int> vector3(5, 12);
cout << "vector1 = ";
// ranged loop
for (const int& i : vector1) {
cout << i << " ";
}
cout << "\nvector2 = ";
// ranged loop
for (const int& i : vector2) {
cout << i << " ";
}
cout << "\nvector3 = ";
// ranged loop
for (int i : vector3) {
cout << i << " ";
}
return 0;
}
运行结果:
vector1 = 1 2 3 4 5
vector2 = 6 7 8 9 10
vector3 = 12 12 12 12 12
4.基本的vector操作
(1) 增加元素
(2) 访问元素
(3) 改变元素
(4) 删除元素
5.向vector添加元素
我们使用push_back( )方法,将一个元素添加到了vector的末尾。
代码案例如下:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
cout << "Initial Vector: ";
for (const int& i : num) {
cout << i << " ";
}
// add the integers 6 and 7 to the vector
num.push_back(6);
num.push_back(7);
cout << "\nUpdated Vector: ";
for (const int& i : num) {
cout << i << " ";
}
return 0;
}
输出结果:
Initial Vector: 1 2 3 4 5
Updated Vector: 1 2 3 4 5 6 7
我们也可以使用insert( )和emplace( )将新元素添加到vector中。
6.访问vector中的元素
我们可以使用at( )函数来访问vector中具有特定下标的元素,比如:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
cout << "Element at Index 0: " << num.at(0) << endl;
cout << "Element at Index 2: " << num.at(2) << endl;
cout << "Element at Index 4: " << num.at(4);
return 0;
}
输出结果:
Element at Index 0: 1
Element at Index 2: 3
Element at Index 4: 5
除了上述的at( )函数,我们也可以使用[ ]去访问数组元素,比如:
vector<int> num {1, 2, 3};
cout << num[1]; // Output: 2
然而最好还是使用at( ),因为当发生越界时,at( )就会抛出异常,而使用[ ]就会得到脏数据.
7.改变vector中的元素
我们同样也能利用at( )函数改变vector中的某个元素,比如:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
cout << "Initial Vector: ";
for (const int& i : num) {
cout << i << " ";
}
// change elements at indexes 1 and 4
num.at(1) = 9;
num.at(4) = 7;
cout << "\nUpdated Vector: ";
for (const int& i : num) {
cout << i << " ";
}
return 0;
}
输出结果:
Initial Vector: 1 2 3 4 5
Updated Vector: 1 9 3 4 7
注意这两个语句:
num.at(1) = 9;
num.at(4) = 7;
这两个语句将下标为1和4的元素的值分别改成了9和7
8.删除C++ Vector中的元素
为了删除vector中的某个单独的元素,我们使用了pop_back( )函数,比如:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> prime_numbers{2, 3, 5, 7};
// initial vector
cout << "Initial Vector: ";
for (int i : prime_numbers) {
cout << i << " ";
}
// remove the last element
prime_numbers.pop_back();
// final vector
cout << "\nUpdated Vector: ";
for (int i : prime_numbers) {
cout << i << " ";
}
return 0;
}
输出结果:
Initial Vector: 2 3 5 7
Updated Vector: 2 3 5
我们使用如下语句删掉了vector中的最后一个元素:
prime_numbers.pop_back();
9.C++ Vector的函数:
10.C++ Vector迭代器
vector的迭代器的作用被用于指向某一个元素的地址,类似于指针。我们可以使用如下的句法创建迭代器:
vector<T>::iterator iteratorName;
11.初始化vector迭代器
我们可以使用begin( )和end( )函数来对vector初始化:
(1) 函数begin( )
begin( )函数返回指向vector的第一个元素的迭代器,比如:
vector<int> num = {1, 2, 3};
vector<int>::iterator iter;
// iter points to num[0]
iter = num.begin();
(2) 函数end( )
该函数指向vector的最后一个元素的下一个位置:
// iter points to the last element of num
iter = num.end() - 1;
11.vector迭代器案例1
代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
// declare iterator
vector<int>::iterator iter;
// initialize the iterator with the first element
iter = num.begin();
// print the vector element
cout << "num[0] = " << *iter << endl;
// iterator points to the 3rd element
iter = num.begin() + 2;
cout << "num[2] = " << *iter << endl ;
// iterator points to the last element
iter = num.end() - 1;
cout << "num[4] = " << *iter << endl ;
return 0;
}
输出结果:
num[0] = 1
num[2] = 3
num[4] = 5
12.vector迭代器案例2
代码:
#include <iostream>
#include <vector>
using namespace std ;
int main()
{
vector<int> num {1, 2, 3, 4, 5} ;
vector<int>::iterator iter ;
for(iter = num.begin(); iter != num.end(); iter++)
cout << *iter << " " ;
}
输出结果:
1 2 3 4 5