vector 容器
STL中最常用的容器为Vector,可以理解为数组,下面简单使用这个容器:插入数据、并遍历这个容器
vector 存储内置数据类型
#include<iostream>
#include<string>
// 引入vector容器
#include<vector>
// 引入算法
#include<algorithm>
using namespace std;
void func(int data) {
cout << data << endl;
}
// 测试 vector 存储内置的基本数据类型
void test01_1() {
// 创建用于存储 int 型数据的vector 容器对象
vector<int> v;
// 向容器尾部添加一个元素
v.push_back(2);
v.push_back(5);
v.push_back(8);
// 遍历方式1
// 获取容器的迭代器(迭代器可以简单理解为指针)
vector<int>::iterator begin = v.begin(); // 指向容器中第一个数据元素的迭代器
vector<int>::iterator end = v.end(); // 指向容器中最后一个元素的下一个位置的迭代器
while (begin != end) {
cout << *begin << endl;
begin++;
}
// 遍历方式2
for (vector<int>::iterator begin = v.begin(); begin != v.end(); begin++) {
cout << *begin << endl;
}
// 遍历方式3:使用STL标准的遍历算法
for_each(v.begin(), v.end(), func);
}
int main() {
test01_1();
return 0;
}
vector 存储对象
#include<iostream>
#include<string>
// 引入vector容器
#include<vector>
// 引入算法
#include<algorithm>
using namespace std;
// 测试 vector 存储自定义的数据类型
class Dog {
friend ostream& operator<<(ostream& out,Dog& dog);
friend void test01_3();
private:
string name;
int age;
public:
Dog() {}
Dog(string name, int age) {
this->name = name;
this->age = age;
}
};
ostream& operator<<(ostream& out, Dog& dog) {
out << dog.name << "_" << dog.age;
return out;
}
// vector 存放对象
void test01_2() {
// 创建存储对象的vcetor容器
vector<Dog> dogs;
Dog dog1("老王",28);
Dog dog2("老李",29);
Dog dog3("老张",30);
// 将对象放入容器
dogs.push_back(dog1);
dogs.push_back(dog2);
dogs.push_back(dog3);
// 迭代遍历容器
for (vector<Dog>::iterator ite = dogs.begin(); ite != dogs.end(); ite++) {
cout << *ite << endl;
}
}
int main() {
test01_2();
return 0;
}
vector 存储对象的指针
#include<iostream>
#include<string>
// 引入vector容器
#include<vector>
// 引入算法
#include<algorithm>
using namespace std;
// 测试 vector 存储自定义的数据类型
class Dog {
friend ostream& operator<<(ostream& out,Dog& dog);
friend void test01_3();
private:
string name;
int age;
public:
Dog() {}
Dog(string name, int age) {
this->name = name;
this->age = age;
}
};
// vector存放对象的指针
void test01_3() {
// 创建存储对象指针的vector容器
vector<Dog*> dogps;
// 创建对象
Dog dog1("老王", 28);
Dog dog2("老李", 29);
Dog dog3("老张", 30);
// 将对象指针存入容器
dogps.push_back(&dog1);
dogps.push_back(&dog2);
dogps.push_back(&dog3);
// 迭代遍历
for (vector<Dog*>::iterator ite = dogps.begin(); ite != dogps.end(); ite++) {
Dog* p = *ite; // 容器存储的是指针,取出的元素的值为地址
cout << p->name<< "_"<<p->age << endl;
}
}
int main() {
test01_3();
return 0;
}
vector 嵌套 vector
#include<iostream>
#include<string>
// 引入vector容器
#include<vector>
// 引入算法
#include<algorithm>
using namespace std;
// vector 容器嵌套
void test01_4() {
// 创建一个存储 vector<int> 容器的容器
vector<vector<int>> vv;
// 创建三个 vector<int> 容器
vector<int> v1;
vector<int> v2;
vector<int> v3;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v2.push_back(4);
v2.push_back(5);
v2.push_back(6);
v3.push_back(7);
v3.push_back(8);
v3.push_back(9);
// 将三个 vector<int> 容器 存入 vector<vector<int>> 容器中
vv.push_back(v1);
vv.push_back(v2);
vv.push_back(v3);
// 遍历 vector<vector<int>> 容器
for (vector<vector<int>>::iterator it1 = vv.begin(); it1 < vv.end(); it1++) {
for (vector<int>::iterator it2 = (*it1).begin(); it2 < (*it1).end(); it2++) {
cout << *it2 << " "; // 1 2 3 4 5 6 7 8 9
}
}
}
int main() {
test01_4();
return 0;
}