C++ STL库

vector 、 stack 、 queue 、 map 、 set 这些在C++中都叫做容器,这些容器的⼤⼩都可以⽤ .size()获取到,就像 string s 的⻓度⽤ s.length() 获取⼀样。( string 其实也可以⽤ s.size() ,不过对于vector 、 stack 、 queue 、 map 、 set 这样的容器我们⼀般讨论它的⼤⼩ size ,字符串⼀般讨论它的⻓度 length ~其实 string ⾥⾯的 size 和 length 两者没什么区别,都可以使用。
1.vector
C语⾔中使⽤ int arr[] 定义数组,缺点是数组的⻓度不能随⼼所欲的改变,⽽C++⾥⾯有⼀个能完全替代数组的动态数组 vector,它能够在运⾏阶段设置数组的⻓度、在末尾增加新的数据、在中间插⼊新的值、⻓度任意被改变。
它在头⽂件 vector ⾥⾯,也在命名空间 std ⾥⾯,所以使⽤的时候要引⼊头⽂件 #include 和 using namespace std;
#include
#include
using namespace std;
int main()
{
vector vec; // 定义⼀个vector vec,定义的时候没有分配⼤⼩
cout << vec.size(); // 输出vector vec的⼤⼩,此处应该为0
return 0;
}
vector 可以⼀开始不定义⼤⼩,之后⽤ resize ⽅法分配⼤⼩,也可以⼀开始就定义⼤⼩,之后还可以对它插⼊删除动态改变它的⼤⼩,⽽且不管在 main 函数⾥还是在全局中定义,它都能够直接将所有的值初始化为0(默认所有的元素为0)。
vector v(10); // 定义⻓度为10的int数组,默认这10个元素值都为0

// 或者
vector vec;
vec.resize(8); //先定义⼀个vector变量v1,然后将⻓度resize为8,默认这8个元素都是0

// 在定义的时候就可以对vector变量进⾏初始化
vector vec(100, 9);// 把100⻓度的数组中所有的值都初始化为9
//或者
vector vec = {0,1,2,3};
// 访问的时候像数组⼀样直接⽤[]下标访问即可;
cout << v[0];

常⽤的 vector ⽅法:
a.push_back(i);//将元素或变量的值加到容器a的最后面,位置为当前最后一个元素的下一个元素
a.pop_back(i);//移除容器a最后一个元素
a.size();//返回容器a的大小
a.front();//返回容器a第一个元素
a.back();//返回容器a最后一个元素
a.begin() //指向容器a的第⼀个元素
a.end() //指向容器a的最后⼀个元素的后⼀个位置
a.clear();//清空容器a中的元素,不会清空数组的内存

2.set
set 是集合,set ⾥⾯的各元素是各不相同的且 set 会按照元素进⾏从⼩到⼤排序
以下是 set 的常⽤⽤法:
#include
#include
using namespace std;
int main()
{
set s; // 定义⼀个空集合s
s.insert(1); // 向集合s⾥⾯插⼊⼀个1
for (int i = 0; i < 6; i++) {
s.insert(i); // 向集合s⾥⾯插⼊i
}
cout << endl << (s.find(2) != s.end()) << endl;
// 查找集合s中的值,如果结果等于s.end()表示未找到 (因为s.end()表示s的最后⼀个元素的下⼀个元素所在的位置)
cout << (s.find(10) != s.end()) << endl; // s.find(10) != s.end()表示能找到10这个元素
s.erase(1); // 删除集合s中的1这个元素
cout << (s.find(1) != s.end()) << endl;
// 这时候元素1就应该找不到啦~
return 0;
}

3.stack
数据结构栈的调用
常用方法:
#include
#include
using namespace std;
int main()
{
stack s; // 定义⼀个空栈s
for (int i = 0; i < 6; i++) {
s.push(i); // 将元素i压⼊栈s中
}
cout << s.top() << endl; // 访问s的栈顶元素
cout << s.size() << endl; // 输出s的元素个数
s.pop(); // 移除栈顶元素
return 0;
}

4.queue
数据结构队列的调用
常用方法:
#include
#include
using namespace std;
int main()
{
queue q; // 定义⼀个空队列q
for (int i = 0; i < 6; i++) {
q.push(i); // 将i的值依次压⼊队列q中
}
cout << q.front() << " " << q.back() << endl; // 访问队列的队⾸元素和队尾元素
cout << q.size() << endl; // 输出队列的元素个数
q.pop(); // 移除队列的队⾸元素
return 0;
}

5.map(映射)
map 是键值对,⽐如⼀个⼈名对应⼀个学号,就可以定义⼀个字符串 string 类型的⼈名为“键”,学号 int 类型为“值”,如 map<string, int> m; 当然键、值也可以是其它变量类型。map 会⾃动将所有的键值对按照键从⼩到⼤排序, map 使⽤时的头⽂件 #include 以下是 map 中常⽤的⽅法:
#include
#include
#include
using namespace std;
int main()
{
map<string, int> m; // 定义⼀个空的map m,键是string类型的,值是int类型的
m[“zhb”] = 18; // 将key为"zhb", value为18的键值对(key-value)存⼊map中
cout << m[“hello”] << endl; // 访问map中key为"hello"的value, 如果key不存在,则返回0
cout << m[“world”] << endl;
m[“world”] = 3; // 将"world"键对应的值修改为3
m[“,”] = 1; // 设⽴⼀组键值对,键为"," 值为1
// ⽤迭代器遍历,输出map中所有的元素,键⽤it->first获取,值⽤it->second获取
for (auto it = m.begin(); it != m.end(); it++) {
cout << it->first << " " << it->second << endl;
}
// 访问map的第⼀个元素,输出它的键和值
cout << m.begin()->first << " " << m.begin()->second << endl;
// 访问map的最后⼀个元素,输出它的键和值
cout << m.rbegin()->first << " " << m.rbegin()->second << endl;
// 输出map的元素个数
cout << m.size() << endl;
return 0;
}
Map<int,int>的用法
m.insert(map<int,int>::value_type(x,i));

6.unordered_map和unordered_set
unordered_map 在头⽂件 #include <unordered_map> 中, unordered_set 在头⽂件 #include <unordered_set> 中。
unordered_map 和 map (或者 unordered_set 和 set )的区别是, map 会按照键值对的键 key 进⾏排序( set ⾥⾯会按照集合中的元素⼤⼩进⾏排序,从⼩到⼤顺序),⽽ unordered_map (或者 unordered_set )省去了这个排序的过程,如果偶尔刷题时候⽤ map 或者 set 超时了,可以考虑⽤ unordered_map (或者 unordered_set )缩短代码运⾏时间、提⾼代码效率~⾄于⽤法和map 、 set 是⼀样的。

7.sort函数
#include
#include
#include
using namespace std;
int main() {
vector v(10);
for (int i = 0; i < 10; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());//v从⼩到⼤排列
int arr[10];
for (int i = 0; i < 10; i++) {
cin >> arr[i];
}
sort(arr, arr + 10);
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值