【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提供了两种类型的迭代器:iteratorconst_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;}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。