💗个人主页💗
⭐个人专栏——C++学习⭐
💫点击关注🤩一起学习C语言💯💫
目录
导读
1. vector初始化
2. vector iterator 的使用
2.1 常规遍历
2.2 rbegin + rend 反向遍历
3. vector 常见函数使用
3.1 push_back()
3.2 pop_back()
3.3 size()
3.4 empty()
3.5 at()
3.6 front() 和 back()
3.7 clear() 和 erase()
3.8 insert()
4. vector的嵌套使用
导读
今天我们来学习vector的一些基本操作。
vector
是一个动态数组容器,可以存储任意类型的元素。
1. vector初始化
构造函数声明 | 接口说明 |
---|---|
vector() | 无参构造 |
vector(size_type n, const value_type& val = value_type()) | 构造并初始化n个val |
vector (const vector& x); | 拷贝构造 |
vector (InputIterator first, InputIterator last); | 使用迭代器进行初始化构造 |
- 默认构造函数:创建一个空的
vector
对象。 - 指定大小的构造函数:创建一个指定大小的
vector
对象,并且可以指定默认值。 - 拷贝构造函数:通过拷贝一个已存在的
vector
对象来创建一个新的vector
对象。 - 区间构造函数:使用另一个容器的指定区间来创建一个新的
vector
对象。
int main()
{
// 创建一个空的整数类型的vector对象
vector<int> num1;
// 创建一个包含5个整数的vector对象,默认值为0
vector<int> num2(5);
// 创建一个包含5个整数的vector对象,每个元素的默认值为10
vector<int> num3(5, 10);
vector<int> num4{ 10, 20, 30, 40, 50 };
vector<int> num5(num4); // 将num4的内容拷贝给num5
// 使用num4的前3个元素创建一个新的vector对象
vector<int> num6(num4.begin(), num4.begin() + 3);
return 0;
}
2. vector iterator 的使用
2.1 常规遍历
vector
提供了两种类型的迭代器:iterator
和const_iterator
。
iterator
可以用于修改vector
中的元素,而const_iterator
只能用于访问但不能修改元素。
- 迭代器的遍历。
- 使用
auto
关键字简化迭代器声明和遍历。 - 使用范围
for
循环遍历。
begin:获取第一个数据位置的iterator/const_iterator,
end:获取最后一个数据的下一个位置 的iterator/const_iterator
int main()
{
vector<int> numbers{ 1, 2, 3, 4, 5 };
vector<int>::iterator iter; // 创建一个可修改的迭代器
vector<int>::const_iterator citer; // 创建一个不可修改的迭代器
//迭代器的遍历
for (iter = numbers.begin(); iter != numbers.end(); ++iter)
{
// 使用iter访问当前元素
std::cout << *iter << " ";
}
cout << endl;
//使用auto关键字简化迭代器声明和遍历
for (auto iter = numbers.begin(); iter != numbers.end(); ++iter)
{
// 使用iter访问当前元素
std::cout << *iter << " ";
}
cout << endl;
//使用范围for循环遍历
for (auto num : numbers) {
// 使用num访问当前元素
std::cout << num << " ";
}
cout << endl;
return 0;
}
2.2 rbegin + rend 反向遍历
rbegin()
和rend()
是两个成员函数,用于返回一个反向迭代器,分别指向vector
中最后一个元素和第一个元素之前的位置。这对应于反向遍历vector
的需求。
int main()
{
vector<int> numbers{ 10, 20, 30, 40, 50 };
// 使用rbegin()和rend()进行反向遍历
cout << "Reverse traversal using rbegin() and rend(): ";
for (auto it = numbers.rbegin(); it != numbers.rend(); ++it)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
3. vector 常见函数使用
3.1 push_back()
向vector
的末尾添加一个元素。
int main()
{
vector<int> num{ 10, 20, 30, 40, 50 };
num.push_back(60);
num.push_back(70);
for (auto e : num)
{
cout << e << " ";
}
cout << endl;
return 0;
}
3.2 pop_back()
从vector
的末尾删除一个元素。
int main()
{
vector<int> num{ 10, 20, 30, 40, 50 };
for (auto e : num)
{
cout << e << " ";
}
cout << endl;
num.pop_back();
num.pop_back();
for (auto e : num)
{
cout << e << " ";
}
cout << endl;
return 0;
}
3.3 size()
返回vector
中的元素数量。
int main()
{
vector<int> num{ 10, 20, 30, 40, 50 };
cout << num.size() << endl;
return 0;
}
3.4 empty()
检查vector
是否为空,返回一个布尔值。
int main()
{
vector<int> numbers;
if (numbers.empty()) {
cout << "The vector is empty"<<endl;
}
return 0;
}
3.5 at()
访问vector
中指定位置的元素,可以使用索引或迭代器。
int main()
{
vector<int> num{ 10, 20, 30, 40, 50 };
cout << num.at(1) << endl;
return 0;
}
3.6 front() 和 back()
front
:返回vector
中第一个元素的引用。back
:返回vector
中最后一个元素的引用。
int main()
{
vector<int> num{ 10, 20, 30, 40, 50 };
cout << num.front() << endl;
cout << num.back() << endl;
return 0;
}
3.7 clear() 和 erase()
clear
:清空vector
中的所有元素。erase
:删除vector
中指定位置的元素,可以使用索引或迭代器。
int main()
{
vector<int> num{ 10, 20, 30, 40, 50 };
num.erase(num.begin() + 1); // 删除第二个元素
for (auto e : num)
{
cout << e << " ";
}
cout << endl;
num.clear();
for (auto e : num)
{
cout << e << " ";
}
cout << endl;
return 0;
}
3.8 insert()
在vector
指定位置插入一个或多个元素,可以使用索引或迭代器。
int main()
{
vector<int> num{ 10, 20, 30, 40, 50 };
for (auto e : num)
{
cout << e << " ";
}
cout << endl;
// 在第二个位置插入15
num.insert(num.begin() + 1, 15);
for (auto e : num)
{
cout << e << " ";
}
cout << endl;
return 0;
}
4. vector的嵌套使用
vector
可以嵌套在其他vector
中,形成多维的数据结构。这种嵌套的vector
结构可以用于表示二维矩阵、多维数组等数据结构。
int main()
{
// 定义数组的大小
int rows = 3;
int cols = 4;
// 创建一个二维vector
vector<vector<int>> matrix(rows, vector<int>(cols));
// 对二维vector进行赋值
int count = 1;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
matrix[i][j] = count++;
}
}
// 打印二维vector的内容
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}