C++ Day7

STL

#include <vector>
#include <algorithm>

void MyPrint(int val)
{
	cout << val << endl;
}

void test01() {

	//创建vector容器对象,并且通过模板参数指定容器中存放的数据的类型
	vector<int> v;
	//向容器中放数据
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);

	//每一个容器都有自己的迭代器,迭代器是用来遍历容器中的元素
	//v.begin()返回迭代器,这个迭代器指向容器中第一个数据
	//v.end()返回迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置
	//vector<int>::iterator 拿到vector<int>这种容器的迭代器类型

	vector<int>::iterator pBegin = v.begin();
	vector<int>::iterator pEnd = v.end();

	//第一种遍历方式:
	while (pBegin != pEnd) {
		cout << *pBegin << endl;
		pBegin++;
	}

	
	//第二种遍历方式:
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << endl;
	}
	cout << endl;

	//第三种遍历方式:
	//使用STL提供标准遍历算法  头文件 algorithm
	for_each(v.begin(), v.end(), MyPrint);
}

int main() {

	test01();

	system("pause");

	return 0;
}

 Vector存放自定义数据类型 

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>



class Person {
public:
	Person(string name, int age) {
		m_Name = name;
		m_Age = age;
	}
	string m_Name;
	int m_Age;
};

void func(Person &p) {
	cout << p.m_Name << p.m_Age << endl;
}

void test01() {
	vector<Person> v;
	Person p1("1111", 12);
	Person p2("11112", 13);
	v.push_back(p1);
	v.push_back(p2);
	for_each(v.begin(), v.end(), func);

}



int main() {
	test01();
	return 0;
}

 Vector容器嵌套容器

相当于二维数组

string

  

void test01() {
	string s1; //默认构造
	const char* str = "hello";
	string s2(str); //使用字符串初始化

	string s3(s2); //拷贝构造

	string s4(10, 'a');

	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;

}

赋值

拼接

查找和替换

字符串比较

字符串存取

str[i] str.at(i)

string插入和删除

erase(1,3)1号位后删除三个

子串获取

查找获取@的位置 从0截取到@

vector

构造

赋值

容量和大小

插入和删除

v1.insert(v1.begin(),x);相当于头插

数据存取

互换容器

v1.swap(v2);

 

//收缩内存
	vector<int>(v).swap(v); //匿名对象

 相当于x(v),x是匿名对象,用v来拷贝构造 再和v交换 以压缩容量

预留空间

10w的数据要开辟三十次左右

v.reserve(100000);

直接预留 

deque

构造函数

赋值

大小

插入和删除

数据存取

排序

stack

queue

list(链表)

构造函数

赋值和交换

数据存取

反转和排序

set/ multiset 容器

二叉排序树

大小和交换

不能resize

插入和删除

查找和统计

set和multiset区别

pair对组创建

set插入会返回一个对组,包含一个迭代器和一个bool类型

pair<set<int>::iterator, bool>  ret = s.insert(10);

 multiset只返回一个迭代器

pair对组创建

set容器排序

#include <set>

class MyCompare 
{
public:
	bool operator()(int v1, int v2) {
		return v1 > v2;
	}
};
void test01() 
{    
	set<int> s1;
	s1.insert(10);
	s1.insert(40);
	s1.insert(20);
	s1.insert(30);
	s1.insert(50);

	//默认从小到大
	for (set<int>::iterator it = s1.begin(); it != s1.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;

	//指定排序规则
	set<int,MyCompare> s2;
	s2.insert(10);
	s2.insert(40);
	s2.insert(20);
	s2.insert(30);
	s2.insert(50);

	for (set<int, MyCompare>::iterator it = s2.begin(); it != s2.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

map/ multimap容器

构造

map<int,int>m; //默认构造
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(2, 20));
	m.insert(pair<int, int>(3, 30));

 大小和交换

map插入和删除

map查找和统计

map容器排序

和set一样,先设置排序规则,再插入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值