1.系统为某一程序分配空间时,所需时间与空间大小无关,与申请次数有关。
vector:支持比较运算
#include<iostream>
using namespace std;
#include<cstring>
#include<algorithm>
#include<vector>
int main()
{
//定义一个vector
vector<int> a;
//定义一个长度为10的vector
vector<int> a(10);
//定义一个长度为10的vector并且每个数初始值为3
vector<int> a(10, 3);
//返回vector中元素的个数
a.size();
//判断vector是否为空,空返回true,否则返回false
a.empty();
//清空
a.clear();
//返回第一个数
a.front();
//返回最后一个数
a.back();
//向其中插入数
a.push_back();
//第零个数
a.begin();
//最后一个数的后面一个数
a.end();
//遍历方法
for(int i = 0; i < n; i ++) a.push_back(i);
for(int i = 0; i < a.size(); i ++) cout << a[i] << ' ';
for(vector<int> :: iterator i = begin(); i != a.end(); i ++) cout << i << ' ';
//比较运算:按字典序
vector<int> a(3,3);
vector<int> b(3,4);
if(a < b) cout << "Yes" << endl;
//输出为:Yes
}
pair:可以存储二元组
int main()
{
//定义,两变量类型可以任意
pair<int, string> p;
//取得第一个元素
p.first();
//取得第二个元素
p.second();
//初始化
p = make_pair(10, "osborn");
p = {20,"hyq"};
//存储三元素
pair<int , pair<int, int>> p;
}
string:字符串
int main()
{
//定义
string a = "osborn";
//元素个数
a.size();
//判断是否为空
a.empty();
//清空
a.clear();
//可以在其后添加字符串
a += " love hyq";
//输出:osborn love hyq
//指定位置~下一指定位置
cout << a.substr(1, 3);
//输出:osb
//如果下一指定位置远超字符串大小,会输出直至字符串结束
//用printf输出字符串,用c_str();
printf("%s",a.c_str());
}
队列queue:没有clear函数
int main()
{
//定义
queue<int> q;
//清空:重新构造
q = queue<int>();
//队列大小
q.size();
//判断是否为空
q.empty();
//向队尾插入一个元素
q.push();
//返回队头元素
q.front();
//返回队尾元素
q.back();
//弹出队头元素
q.pop();
}
优先队列:priority_queue(无clear函数)默认大根堆
int main()
{
//定义
priority_queue<int> heap;
//向队尾插入元素
heap.push();
//返回堆顶元素
heap.top();
//弹出堆顶元素
heap.pop();
//变成小根堆
priority_queue<int, vector<int>, greater<int>> q;
}
栈stack
int main()
{
//定义
stack<int> st;
//stack中元素的个数
st.size();
//判断是否为空
st.empty();
//返回栈顶元素
st.top();
//向栈尾插入元素
st.push();
//弹出栈顶元素
st.pop();
}
双端队列deque
int main()
{
//定义
deque<int> de;
//返回队列元素个数
de.size();
//返回队头
de.front();
//清空
de.clear();
//返回队头/队尾
de.begin()/end;
//向队尾插入元素
de.push_back();
//弹出队尾元素
de.pop_back();
//弹出队头元素
de.pop_front();
}
set
int main()
{
//定义
set<int> s1;
multiset<int> s2;
//返回元素个数:size();
//查找一个数:find();
//返回某一个数的个数:count();
//erase():
//(1)输入一个数x,删除所有x
//(2)输入一个迭代器,删除所有迭代器
//★/lower_bound()/upper_bound()
//lower_bound(x):返回大于等于x的最小的数
//upper_bound(x):返回大于x的最小的数
}
map/multimap
int main()
{
//insert();插入
//erase();删除
//find();查找
map<string, int> a;
a["osborn"] = 1123;
cout << a["osborn"] << endl;
//输出:osborn1123
lower_bound()/upper_bound();
}
unordered_set,unordered_map,unordered_multiset,unordered_multimap与上述类似,增删查改的时间复杂度为O(1),不支持lower_bound()/upper_bound,和排序有关的操作是不支持的。
bitset:压位
bitset<10000> s;
~, &, |, ^
count();返回有多少个1
any();判断是否至少有一个1
none();判断是否全为0
set();把所有位置成1
set(k, v);把第k位变成v
reset();把所有位变成0
flip();等价于~
flip(k);把第k位取反