C++学习笔记——STL【容器、算法、迭代器初体验】

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值