vector初始化
vector<int> v; //定义一个空 vector 对象
vector<int> v(10); //定义一个具有 10 个元素的 vector 对象(int 型元素默认初始化为 0)
vector<int> v(3,5); //v = { 5, 5, 5 }
vector<int> v1(v); //v1 = v
vector<int> v = { 1, 2, 3 };
vector<int> v1 = v;
set<char> s { 'a', 'b', 'c' };
vector<int> v (s.begin(), s.end()); // v = { 97, 98 , 99}
vector<string>({ret.begin(), ret.end()});
v.insert(it, num);
字符串和数字之间的转换
c++之to_string()函数
函数原型:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
字符串转换
#include <stdlib.h>
atoi() 函数用来将字符串转换成整数(int)
atol() 函数用来将字符串转换成整数(long)
atof() 用于将字符串转换为双精度浮点数(double)
strtod() 用来将字符串转换成双精度浮点数(double)
strtol() 函数用来将字符串转换为长整型数(long)
strtoul() 函数源自于“string to unsigned long”,用来将字符串转换成无符号长整型数(unsigned long)
迭代器
vector<int>::iterator i; //定义正向迭代器
vector<int>::reverse_iterator i; //定义反向迭代器
stack
#include<stack>
stack<int> s;
stack< int, vector<int> > stk; //覆盖基础容器类型,使用vector实现stk
s.empty(); //判断stack是否为空,为空返回true,否则返回false
s.size(); //返回stack中元素的个数
s.pop(); //删除栈顶元素,(但不返回其值)
s.top(); //返回栈顶元素的值,但不删除此元素
s.push(item); //在栈顶压入新元素item
queue
#include<stack>
queue<int> q; //priority_queue<int> q;
q.empty(); //判断队列是否为空
q.size(); //返回队列长度
q.push(item); //对于queue,在队尾压入一个新元素
q.pop() //弹出第一个元素,无返回值
//queue only:
q.front(); //返回队首元素的值(也就是第一个被置入的元素),但不删除该元素
q.back(); //返回队尾元素的值(也就是最后一个被置入的元素),但不删除该元素
//priority_queue only:
q.top(); //返回具有最高优先级的元素值,但不删除该元素
deq.begin();//开始迭代器指针
deq.end(); //末尾迭代器指针
priority_queue
priority_queue<int> q;
q.empty(); //判断队列是否为空
q.size(); //返回队列长度
q.push(item); //在基于优先级的适当位置插入新元素
q.pop() //弹出优先级最低的元素,没有返回值
q.top(); //返回具有最高优先级的元素值,但不删除该元素
//升序队列,小顶堆
priority_queue <int,vector<int>,greater<int> > q;
//降序队列,大顶堆
priority_queue <int,vector<int>,less<int> >q;
//对于基础类型 默认是大顶堆
priority_queue<int> q;
deque
deq.size(); //容器大小
deq.empty(); //容器判空
deq.push_front(x); //头部添加元素
deq.push_back(x); //末尾添加元素
deq.insert(iterator it, const T& x); //任意位置插入一个元素
deq.insert(iterator it, int n, const T& x); //任意位置插入 n 个相同元素
deq.insert(iterator it, iterator first, iterator last); //插入另一个向量的 [forst,last] 间的数据
deq.pop_front(); //头部删除元素
deq.pop_back(); //末尾删除元素
deq.erase(iterator it); //任意位置删除一个元素
deq.erase(iterator first, iterator last); //删除 [first,last] 之间的元素
deq.clear(); //清空所有元素
deq[1]; //下标访问
deq.at(1); //at 方法访问
deq.front(); //访问第一个元素
deq.back(); //问最后一个元素
//遍历元素
deque<int>::iterator it;
for (it = deq.begin(); it != deq.end(); it++)
cout << *it << endl;
// 或者
for (int i = 0; i < deq.size(); i++) {
cout << deq.at(i) << endl;
}
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char* argv[])
{
deque<int> deq;
// 头部增加元素
deq.push_front(4);
// 末尾添加元素
deq.push_back(5);
// 任意位置插入一个元素
deque<int>::iterator it = deq.begin();
deq.insert(it, 2);
// 任意位置插入n个相同元素
it = deq.begin(); // 必须要有这句
deq.insert(it, 3, 9);
// 插入另一个向量的[forst,last]间的数据
deque<int> deq2(5,8);
it = deq.begin(); // 必须要有这句
deq.insert(it, deq2.end() - 1, deq2.end());
// 遍历显示
for (it = deq.begin(); it != deq.end(); it++)
cout << *it << " "; // 输出:8 9 9 9 2 4 5
cout << endl;
return 0;
}
reverse
#include <algorithm>
reverse(deq.begin(), deq.end());
元素排序
#include <algorithm>
sort(deq.begin(), deq.end()); // 采用的是从小到大的排序
// 如果想从大到小排序,可以采用先排序后反转的方式,也可以采用下面方法:
// 自定义从大到小的比较器,用来改变排序方式
bool Comp(const int& a, const int& b) {
return a > b;
}
sort(deq.begin(), deq.end(), Comp);
遍历
deque<int>::iterator it;
for (it = deq.begin(); it != deq.end(); it++)
cout << *it << endl;
// 或者
for (int i = 0; i < deq.size(); i++) {
cout << deq.at(i) << endl;
}
list
#include <list>
//list定义和初始化
list<int>lst1; //创建空list
list<int> lst2(5); //创建含有5个元素的list
list<int>lst3(3,2); //创建含有3个元素的list
list<int>lst4(lst2); //使用lst2初始化lst4
list<int>lst5(lst2.begin(),lst2.end()); //同lst4
//list常用操作函数
Lst1.assign() 给list赋值
Lst1.back() 返回最后一个元素
Lst1.begin() 返回指向第一个元素的迭代器
Lst1.clear() 删除所有元素
Lst1.empty() 如果list是空的则返回true
Lst1.end() 返回末尾的迭代器
Lst1.erase() 删除一个元素
Lst1.front() 返回第一个元素
Lst1.get_allocator() 返回list的配置器
Lst1.insert() 插入一个元素到list中
Lst1.max_size() 返回list能容纳的最大元素数量
Lst1.merge() 合并两个list
Lst1.pop_back() 删除最后一个元素
Lst1.pop_front() 删除第一个元素
Lst1.push_back() 在list的末尾添加一个元素
Lst1.push_front() 在list的头部添加一个元素
Lst1.rbegin() 返回指向第一个元素的逆向迭代器
Lst1.remove() 从list删除元素
Lst1.remove_if() 按指定条件删除元素
Lst1.rend() 指向list末尾的逆向迭代器
Lst1.resize() 改变list的大小
Lst1.reverse() 把list的元素倒转
Lst1.size() 返回list中的元素个数
Lst1.sort() 给list排序
Lst1.splice() 合并两个list
Lst1.swap() 交换两个list
Lst1.unique() 删除list中相邻重复的元素
vector
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
map
map
map.find(key);//返回一个地址,可以用迭代器接收
mp[key] = value// 插入数据
iterator it= map.find(key);
map.count(key) // 统计key出现的次数,结果为0或者1
it.first为key
it.second为value
map<int ,string>maplive;
// 添加数据
maplive.insert(pair<int,string>(102,"aclive"));
maplive.insert(map<int,string>::value_type(321,"hai"));
maplive[112]="April";//map中最简单最常用的插入添加!
//元素的查找
map<int ,string >::iteratorl_it;
// 当key为x时
l_it=maplive.find(x);//返回的是一个指针
if(l_it==maplive.end())
cout<<"we do not find x"<<endl;
else
cout<<"wo find x"<<endl;
map<string,string>m;
if(m[x]=="")
cout<<"we do not find x"<<endl;
//元素的删除
map<int ,string>::iterator l_it;;
l_it =maplive.find(112);
if( l_it == maplive.end())
cout<<"we do not find112"<<endl;
else
maplive.erase(l_it);//delete 112;
unordered_map:
优点: 因为内部实现了哈希表,因此其查找速度非常的快
缺点: 哈希表的建立比较耗费时间
适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map
set
在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。set中元素的值不能直接被改变。set内部采用的是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树。
begin(); // 返回指向第一个元素的迭代器
end(); // 返回指向迭代器的最末尾处(即最后一个元素的下一个位置)
clear(); // 清除所有元素
count(); // 返回某个值元素的个数
empty(); // 如果集合为空,返回true
equal_range(); //返回集合中与给定值相等的上下限的两个迭代器
erase()–删除集合中的元素
find()–返回一个指向被查找到元素的迭代器
get_allocator()–返回集合的分配器
insert()–在集合中插入元素
lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()–返回一个用于元素间值比较的函数
max_size()–返回集合能容纳的元素的最大限值
rbegin()–返回指向集合中最后一个元素的反向迭代器
rend()–返回指向集合中第一个元素的反向迭代器
size()–集合中元素的数目
swap()–交换两个集合变量
upper_bound()–返回大于某个值元素的迭代器
value_comp()–返回一个用于比较元素间的值的函数