C++ STL 基础

这篇博客详细介绍了C++ STL的基础知识,包括vector、deque、list、set、multiset、map和multimap的初始化、成员函数及其操作。同时,提到了STL算法和迭代器的重要概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ STL 基础

STL: Standard Template Library;
STL的常规操作:查询,插入,删除,修改;

  • 在C++中使用标准模板库提供的容器,需要加入相应的头文件,并且使用命名空间std;
  • 容器适配器头文件:queue; stack;
  • 容器头文件:vector; dqueue; list; map; set;

vector

vector:支持随机访问的数组类型,它是可变大小的;

初始化

std::vector<type> name;
std::vector<type> name(size);						//明确size;
std::vector<type> name(size, value);				//所有元素指定初始值value;
std::vector<type> name(current_vector);				//复制构造函数;
std::vector<type> name(first, last);				//创建在first 和last之间的向量;

常用成员函数

在这里插入图片描述
在这里插入图片描述

Reference: https://blog.youkuaiyun.com/virtualdesk/article/details/4353836

deque

deque 是一种双端队列,提供了在序列两端快速插入和删除操作的功能,支持随机访问;

初始化

std::deque<type> name;
std::deque<type> name(size);					//明确size;
std::deque<type> name(size, value);				//所有元素指定初始值value;
std::deque<type> name(current_deque);			//复制构造函数;
std::deque<type> name(first, last);				//创建在first 和last之间的向量;

成员函数

在这里插入图片描述

Reference: https://blog.youkuaiyun.com/jianpeng5/article/details/24591101

list

list:双向链表容器,不支持随机访问,访问list中的元素需要从链表某个端点开始,插入和删除花费时间固定,和链表中的位置无关;

初始化

std::list<type> name;
std::list<type> name(size);						//明确size;
std::list<type> name(size, value);				//所有元素指定初始值value;
std::list<type> name(current_list);				//复制构造函数;
std::list<type> name(first, last);				//创建在first 和last之间的向量;

成员函数

在这里插入图片描述

Reference: https://zh.cppreference.com/w/cpp/container/list

其他

list中的迭代器不支持+运算符;
list遍历元素一般使用迭代器;

	using namespace std;

	int array[10] = {1, 3, 5};
	list<int> list_1(array, array+3);
	list<int>::iterator iter = list_1.begin();

	//上边和下边的代码关系不是很大;
	for(auto it = list_1.begin(); it !=list_1.end(); it++)
	{
		std::cout << " " << *it;
	}

set

set是结合容器的一种,一个set像链表一样顺序地存储一组值,在一个set中,元素是存储的数据,同时也是数据的键值;
结合容器包括:set, multiset, map, multimap, hash table;

初始化

std::set<type, predicate> name;
std::set<type, predicate> name(current_set);
std::set<type, predicate> name(first, last);

//predicate: A predicate is simply a function that returns true or false depending on whether its input(s) satisfy some condition;

//example;
std::set< int, std::less<int> > int_set;

成员函数

c++ stl容器set成员函数:

function用途
begin()返回指向第一个元素的迭代器
clear()清除所有元素
count()返回某个值元素的个数
empty()如果集合为空,返回true
end()返回指向最后一个元素的迭代器
equal_range()返回集合中与给定值相等的上下限的两个迭代器
erase()删除集合中的元素
find()返回一个指向被查找到元素的迭代器
get_allocator()返回集合的分配器
insert()在集合中插入元素
lower_bound()返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()返回一个用于元素间值比较的函数
max_size()返回集合能容纳的元素的最大限值
rbegin()返回指向集合中最后一个元素的反向迭代器
rend()返回指向集合中第一个元素的反向迭代器
size()集合中元素的数目
swap()交换两个集合变量
upper_bound()返回大于某个值元素的迭代器
value_comp()返回一个用于比较元素间的值的函数

multiset

和set不同的地方在于,multiset可以包含重复的数据;

multiset的初始化
std::multiset<type, predicate> name;
std::multiset<type, predicate> name(current_multiset);
std::multiset<type, predicate> name(first, last);

map

map: 按照顺序存储一组值,map中的键和值是分开的;

初始化

std::map<key, type, predicate> name;
std::map<key, type, predicate> name( current_map );
std::map<key, type, predicate> name( first, last );

// example;
std::map<int, int, std::less<int> > int_map;

成员函数

Reference: https://zh.cppreference.com/w/cpp/container/map/at

multimap

同multiset;
不可以使用[]操作符向多重映射中插入元素;

STL 算法

包含四种:非修正序列算法,修正序列算法,排序算法,数值算法;

迭代器

Example:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
	vector<int> int_vec(5);
	vector<int>::iterator iter = int_vec.begin();
	for(int count = 1; iter != int_vec.end(); iter++, count++)
	{
		*iter = count;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值