C++基础——STL

vector

一. vector数组的初始化

1.1 一维vector数组的初始化

//1. 数组长度由外部输入确定
int n;
cin >> n;
vector<int> a(n);

//2. 数组长度由自己指定
vector<int> b(10);

//3. 直接定义数组元素
vector<int> c = { 1,2,3,4,5 }; //列表初始化,注意使用的是花括号

1.2 二维vector数组的初始化

vector<vector<int>> res;
//1. 数组长度由外部输入确定
int n;
cin >> n;
vector<vector<int>> a(n, vector<int>(n, 0));

//2. 定义第一维固定长度为5,第二维可变化的二维数组
vector<int> b[5];
//注意:行是不可变的(只有5行),而列可变可以在指定行添加元素;第一维固定长度为5,第二维长度可以改变
//3. 直接定义数组元素
vector<vector<int>> nums{ {1,2,3,4,5},{1,2,3,4,5}};

二. vector数组的常用方法

2.1 常用内置函数

vector<int> a;
vector<int> b = {1, 2, 3, 4, 5};
//b为向量,将b的0-2个元素赋值给向量a
a.assign(b.begin(), b.begin() + 3);

//将a重置为包含4个2的数组
a.assign(4, 2);

//返回a的最后一个元素
a.back();
//返回a的第一个元素
a.front();
//清空a中的元素
a.clear();
//判断a是否为空,空则返回true,非空则返回false
a.empty();
//删除a向量的最后一个元素
a.pop_back();
//删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束
a.erase(a.begin(), a.begin() + 3);

//在a的最后一个向量后插入一个元素,其值为5
a.push_back(5);
//在a的第一个元素(从第0个算起)位置插入数值5,
a.insert(a.begin() + 1, 5);
//在a的第一个元素(从第0个算起)位置插入3个数,其值都为5
a.insert(a.begin() + 1, 3, 5);
//b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6)
a.insert(a.begin() + 1, b + 3, b + 6);
//返回a中元素的个数
a.size();
//将a的现有元素个数调整至10个,多则删,少则补,其值随机
a.resize(10);
//将a的现有元素个数调整至10个,多则删,少则补,其值为2
a.resize(10, 2);
//将a的容量扩充至100,
a.reserve(100);
//b为向量,将a中的元素和b中的元素整体交换
a.swap(b);
//b为向量,向量的比较操作还有 != >= > <= <
a == b;    //判断向量a和b中的每个元素是否相等

2.2 常用算法

//1. 对a中的元素倒置
 reverse(a.begin(),a.end());
 //2. 在b中找某个值,可以使用迭代器访问
 vector<int>::iterator it = find(b.begin(), b.end(), 3);
if (it == b.end())
	cout << "NO" << endl;
else
	cout << "YES" << endl;
	
for(vector<int>::iterator it=b.begin();it!=b.end();it++){
cout<<*it<<"  ";
}

//3. 也可以直接使用find
if (find(b.begin(), b.end(), 1) != b.end()) {
	cout << "YES";
}
//4. 使用迭代器查找元素在数组中的位置
vector<int>::iterator element = find(temp.begin(), temp.end(), nums[i]);
int pos = distance(temp.begin(), element);  //返回的是元素在数组中的位置(从0开始)

2.3 迭代器的使用

bool cmp1(pair<int, int>a, pair<int, int>b)
{
	return a.first < b.first;
}

//main函数:
vector<pair<int, int>>vec;
	vec.push_back({ 1,2 });
	vec.push_back({ 4,2 });
	vec.push_back({ 3,3 });
	vec.push_back({ 2,1 });

	sort(vec.begin(), vec.end(), cmp1);
	cout << "根据first的值升序排序:" << endl;
	for (auto it = vec.begin(); it != vec.end(); it++)
	{
		cout << "(" << it->first << "," << it->second << ")" << endl;
	}

注意:vi[i] 和 *(vi.begin() + i) 等价

map

一. map的介绍

map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据按键的大小自动排序的功能,所以在map内部所有的数据都是有序的。
在这里插入图片描述

二. map的内置函数

mp.find(key)返回键为key的映射的迭代器 O(logN) 注意:用find函数来定位数据出现位置,它返回一个迭代器。当数据存在时,返回数据所在位置的迭代器,数据不存在时,返回mp.end()
mp.erase(it)删除迭代器对应的键和值O(1)
mp.erase(key)根据映射的键删除键和值 O(logN)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,priority_queue是一个容器适配器,用于实现优先级队列。默认情况下,priority_queue是一个大顶堆,也就是说,优先级最高的元素会被放在队列的前面。但是,我们也可以通过自定义排序规则来创建小顶堆。 在C++中,可以通过指定第三个模板参数Compare来自定义排序规则。比如,可以使用std::greater<T>来创建小顶堆,其中T是存储在priority_queue中的元素类型。例如,可以这样定义一个小顶堆的priority_queue: ```cpp std::priority_queue<int, std::vector<int>, std::greater<int>> pq; ``` 这样定义的priority_queue会根据元素的值从小到大进行排序,优先级最高的元素会被放在队列的前面。 另外,priority_queue还提供了一些成员函数来操作队列,比如empty()、size()、top()、push()、pop()等。你可以使用这些成员函数来判断队列是否为空、获取队列的大小、访问队列的第一个元素、向队列中插入元素以及移除队列中的元素。 总结起来,如果你想创建一个小顶堆的priority_queue,可以通过指定std::greater<T>作为第三个模板参数来实现。然后,你可以使用priority_queue提供的成员函数来操作队列。 #### 引用[.reference_title] - *1* [C++ STL——Queue容器、priority_queue](https://blog.csdn.net/LiuXF93/article/details/121119026)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [c++priority_queue详解](https://blog.csdn.net/qq_43679351/article/details/124825229)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值