常用数据结构

排序:

upper_bound()   指定范围内查找大于目标值的第一个元素。  #include <algorithm>

lower_bound() 返回值是一个迭代器,返回指向大于等于key的第一个值的位置

greater<int>() 递减, less<int>() 递增

bool mycomp(int i, int j) { return i > j; }
vector<int>::iterator iter = upper_bound(myvector.begin(), myvector.end(), 3, mycomp2());

sort函数中的greater排序(从大到小)less(从小到大)

sort(nums1.begin(), nums1.end(), greater<int>());

降续排序:

sort(arr.begin(), arr.end(), [](string a, string b) { return a > b; });

min_element 函数返回队列的最小值的迭代器

max_element 函数返回队列的最大值的迭代器

vector<int> n;
int maxPosition = max_element(n.begin(),n.end()) - n.begin(); // 最大值下标
int minPosition = min_element(n.begin(),n.end()) - n.begin();  // 最小值下标

 优先队列 用一个map存放出发地与目的地,priority_queue正好保证 队头小,队尾大

 unordered_map<string, priority_queue<string, vector<string>, std::greater<string>>> vec;

 队头小,队尾大

priority_queue<string, vector<string>, std::greater<string>>

 队头大,队尾小(默认)

priority_queue<string, vector<string>, std::less<string>>

优先队列操作

插入 push

弹出 pop

队头元素 top

是否为空 empty

map:

map在我们插入<key, value>键值对时,就会按照key的大小顺序进行存储,其中key的类型必须能够进行 < 运算,且唯一,默认排序是按照从小到大排序。

如果想由大到小排序:指定greater<string>

因此我们在定义map的时候,可以指定如下

map<string,int,greater<string> >

栈:

判断栈是否为空,empty(),栈顶元素top(),出栈pop(),入栈push()

queue队列操作: 只能在容器的末尾添加新元素,只能从头部移除元素。

访问第一个元素:front() 移除第一个元素:pop() 访问最后一个元素:back()                                尾部添加元素:push()


vector:

reverse翻转vector

back(): 返回当前vector容器中末尾元素的引用。

pop_back(): 移除最后一个元素

 
用swap函数交换相同类型的两个变量内容位置 只用于vector

reverse函数翻转整个内容 可以用于string和vector


获取总和:

accumulate(retVec[i].begin(), retVec[i].end(), 0)

set:

set容器特点是没有重复元素,通过set和set的第二个参数greater<int>,达到的目的:1、去重 2、从大到小排列

set<int,greater<int>>


list:

实现方式为双向链表,由于链表的特点,任意地方的删除和插入效率很高,不支持随即存取。

两端添加元素

push_back() 和push_front()

访问两端元素

 front()和back():

删除两端元素

pop_back和pop_front():

插入:

l1.insert(l1.begin(),100); 在l1的开始位置插入100。

l1.insert(l1.begin(),2,200); 在l1的开始位置插入2个100。

l1.insert(l1.begin(),l2.begin(),l2.end());在l1的开始位置插入l2的从开始到结束的所有位置的元素。

删除

l1.erase(l1.begin()); 将l1的第一个元素删除。

l1.erase(l1.begin(),l1.end()); 将l1的从begin()到end()之间的元素删除。


判断字母:

判断字母是否为大写:

bool IsUpperCase(char ch)
{
    return ch >= 'A' && ch <= 'Z';
}


也可以直接用系统函数std::isupper


C 库函数 void isalnum(int c) 检查所传的字符是否是字母和数字

isalpha函数判断是不是字母

字符转化为整数:字符 - '0'

整数转化为字符:整数 + '0'

字符串:

(3)修改字符串:

函数assign()给string类变量赋值.

如str2.assign(str1);即用str1给str2赋值.


(4)查找,删除字符串

find函数第二个参数为从第几个字符开始寻找

find(myvector.begin(), myvector.end(), 30);


erease函数的第二个参数为删除几个字符

删除迭代器p所指向的元素 c.erase(p),

删除迭代器b,e所标记的范围内的元素 c.erase(b,e); 返回值都是一个迭代器,该迭代器指向被删除元素后面的元素


(5)字符串初始化

创建一个新的字符串,长度为length,初始化length个0 : string outputStr(length, 0);


(6)截取字符串

substr(i, 10)从位置i开始,截取长度为10的字符串

字符串整数之间转化:

(1)字符串转化为整数

stoi()函数把字符串转化成整数

(2)整数转字符串

to_string()


逆序遍历:

iter = .rbegin()

While(iter != .rend()){
}


获取最后一位数字,删除最后一位数字:

一个数取余%,获取最后一位,取整/,删掉最后一位,(被除数是进制基数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值