目录
4.6.1 Vector:STL最常用的容器,可以理解为数组
4.6 STL中容器、算法、迭代器
容器:置物之所也,STL容器就是将运用最广泛的—些数据结构实现出来常用的教据结构:数组,链表,树,戈,队列,集合,映射表等。
这些容器分为序列式容器和关联式容器两种:
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。
关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系
4.6.1 Vector:STL最常用的容器,可以理解为数组
下面简单介绍vector的简单用法,如何插入数据以及如何遍历数据
vector也称为单端数组,
vector与普通数组的区别:
不同之处在于普通数组是静态数组,而vector是动态扩展(动态扩展并不是在原空间之后持续空间,而是找更大的内存的空间,然后将原数据拷贝新空间,释放原空间)
deque双端数组:可以对头部进行插入删除操作
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
void test01() {
//创建一个vector的容器,相当于一个数组,vector<数据类型> 别名
vector<int> v;
//插入数据
v.push_back(1);
v.push_back(2);
v.push_back(3);
//通过迭代器访问容器中的数据
vector<int>::iterator isBegin = v.begin(); // v.begin()起始迭代器,指向容器中第一个元素
vector<int>::iterator isEnd = v.end(); // v.begin()结束迭代器,指向容器中最后一个元素的下一位
while (isBegin != isEnd)
{
cout << *isBegin << endl; //相当于指针,采用解引用的方式输出
isBegin++;
}
}
void test03(int a) {
cout << a << endl;
}
//第二种遍历方式
void test02() {
vector<int> v1;
//插入数据
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
{
cout << *it << endl;
}
//第三种遍历方式
for_each(v1.begin(), v1.end(), test03);
}
int main() {
//test01();
test02();
return 0;
}
4.6.2Vector存放自定义的数据类型
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
class person
{
public:
person(string name,int age) {
this->name = name;
this->age = age;
}
string name;
int age;
private:
};
//存放自定义数据类型
void test01() {
vector<person> v;
person p1("a", 22);
person p2("b", 33);
person p3("c", 44);
//向容器中添加数据
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
for (vector<person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << "姓名: " << (*it).name << " 年龄: " << (*it).age << endl;
//或者
cout << "姓名: " << it->name << " 年龄: " << it->age << endl;
}
}
//存放自定义数据类型 指针
void test02() {
vector<person*> v;
person p1("a", 22);
person p2("b", 33);
person p3("c", 44);
//向容器中添加数据
v.push_back(&p1);
v.push_back(&p2);
v.push_back(&p3);
//(*it)在下面就是 vector<person *>::iterator 里面的内容,在这里就是一个指针vector<person *>::iterator
for (vector<person *>::iterator it = v.begin(); it != v.end(); it++)
{
cout << "姓名: " << (*it)->name << " 年龄: " << (*it)->age << endl;
}
}
int main() {
test01();
return 0;
}
4.6.3 vector容器嵌套
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void test01() {
vector<vector <int>> v;
//创建小容器
vector<int>v1;
vector<int>v2;
vector<int>v3;
for (int i = 1; i <= 4; i++)
{
v1.push_back(0 + i);
v2.push_back(4 + i);
v3.push_back(8 + i);
}
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
//先遍历大容器,再遍历每一个小容器
for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
{
for (vector<int>::iterator it2 =(*it).begin(); it2 != (*it).end(); it2++)
{
cout << *it2 << " ";
}
cout << endl;
}
}
int main() {
test01();
return 0;
}