【C++】vector的基本使用
流浪者与猴 2024-06-15 12:35:02 阅读 56
💗个人主页💗
⭐个人专栏——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对象,默认值为0vector<int> num2(5); // 创建一个包含5个整数的vector对象,每个元素的默认值为10vector<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;// 在第二个位置插入15num.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;}
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。