c++数据结构与算法 STL cpp

vector

#include <vector>

# vector就是动态数组

vector<int> vec;                                            # 初始化
vector<int> vec(n, -1);                                    # n个元素全是-1

vec.size()

for(auto it = vec.begin(); it != vec.end(); it++) {        # 遍历
    cout << *it;
}
for(auto i: vec) {
    cout << i;
}

for(auto it = vec.rbegin(); it != vec.rend(); it++ {        # 倒序遍历
    cout << *it;
}

vec.push_back(1);                                           # 末尾增

vec.insert(vec.end(), vec.begin(), vec.end());              # 插入
vec.insert(<where>, <first>, <last>);

vec.erase(vec.begin(), vec.end());                          # 删, 末尾不包括
vec.erase(vec.begin());                                     # 删
# erase没有其他重载

swap(vec[0], vec[1]);                                       # 改, 交换

vec[0]    vec.at(0)     vec.front()                         # 查
vec.back()                                                  # 不移除,不能赋值

sort(vec.begin(), vec.end(), [](int a, int b) -> bool {    # 排序<algorithm> 快速排序 原地
    return a > b;
});

find(vec.begin(), vec.end(), 3);                # 查找元素,返回迭代器,找不到返回end()

array

array<int, 5> arr = {1, 2, 3, 4, 5};

map

map是有序的,关于key升序排序

map是红黑树

map<int, int> mp;                                # 初始化
mp[2]++;                                         # 直接初始化成0值

mp.size()                                        # 元素个数
mp.count(1);                                     # 查

for(auto it = mp.begin(); it != mp.end(); it++) {            # 遍历
    cout << it -> first;
    cout << it -> second;
}
for(auto it: mp) {
    cout << it.first;
    cout << it.second;
}

mp.find(2);                                  # 根据key查找,返回迭代器,找不到返回end()
it = mp.erase(2);                            # 可根据键值和迭代器移除,返回下一个迭代器
it = mp.erase(it);

string

string str = "Hello world!";    # 初始化
string str(9, '.');             # 初始化

str.size();

str.push_back('a');             # 增

str.erase(5, 1);                # 删, 索引5去除1个

reverse(str.begin(), str.end());        # 反转字符串, 原地修改

str.back();                                # 返回str最后一个字符,不移除
str.front();                               # 返回str第一个字符,不移除
count(str.begin(), str.end(), '1');        # 查
str.pop_back();                 # 移除最后一个字符,不返回

sub = str.substr(2);            # 从索引2开始,到末尾
sub = str.substr(2, 5);         # 从索引2开始,长度为5

pair

# pair大小比较:先比较first,再比较second

pair<int, int> pr(0, 1);
make_pair(0, 1);

int a = pr.first, b = pr.second;              # 访问元素

tuple

#include <tuple>

tuple<int, int, int> tp(0, 1, 2);
make_tuple(0, 1, 2);

int a = get<0>(tp);                        # 访问元素

queue

#include <queue>

queue<int> que;                # 初始化

que.pop();                     # 移除队首元素,不返回
que.top();                     # 返回队首元素,不移除,不能赋值

if(que.empty())                # 判断是否为空

priority_queue

#include <queue>

# priority_queue默认是大根堆

struct Com {
    bool operator()(const pr& a, const pr& b) {
        return a.first > b.first;                    # true返回第零个参数a
    }
};
priority_queue<pr, vector<pr>, Com> que;

priority_queue<int, vector<int>, greater<int>> A;
priority_queue<int, vector<int>, less<int>> B; 

stack

sta.empty()        # 是否为空
sta.pop()          # 不返回值
sta.top()          # 返回元素, 不能赋值

set

set是红黑树

unordered_set

unordered_set<int> ust;                            # 初始化
unordered_set<int> ust(vec.begin(), vec.end());
ust.insert(1);                                     # 增
ust.clear();                                       # 删
ust.erase(1);                                      # 删

ust.count(1);                                      # 查

stringstream

#include <sstream>

vector<int> vec;
string input;
cin >> input;
stringstream ss(input);
string tmp;

while (getline(ss, tmp, ',')) {
    vec.push_back(stoi(tmp));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值