码迷,mamicode.com
首页 > 其他好文 > 详细

常用的 STL 函数

时间:2015-09-18 21:56:32      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:

常用的 STL 函数

常用的 STL 函数

介绍

容器, 迭代器, 算法

容器:

顺序容器 (vector, list, deque, string),  有序集合
关联容器 (set, multiset, map, multimap), 包含查找元素到键值

迭代器: 遍历容器 traverse container

算法库: 排序, 不可变序, 变序性, 数值

迭代器可以使用 +1 的, vector, string, list, dequeu
不可以使用迭代器的, stack, queue, priority_queue

string

s.length();
s = s + "abc";

s = "123456";
cout << s.substr(1);    // 23456
cout << s.substr(1, 2); // 23

队列

queue<int> q;

q.push(3);
q.pop();                    // 无法返回
q.front();
q.back();
q.size();
q.empty();

deque<int> dq;

dq.push_back(2);
dq.push_front(-1);
dq.pop_back();
dq.pop_front();
cout << dq[0];              // -1
dq.size();
dq.insert(d.begin()+2, 0);  // 在第三位插入
dq.erase(d.begin());
dq.clear();

最大堆

priority_queue<int> pq;

pq.push();
pq.pop();
pq.top();
pq.size();
pq.empty();

声明一个最小堆

priority_queue<int, vector<int>, greater<int> > que;

自定义排序

struct mycomp {
        bool operator() (const int &a, const int &b) {
                return a > b;
        }
};

priority_queue<int, vector<int>, mycomp> pq;
// vector<int>  显式说明内部结构是 vector

集合

set<int> s; (本身用二叉搜索树实现), 默认从小到大排好序

s.insert(3);
s.erase(3);
s.find(3);
s.count(3);
s.size();
s.empty();
s.clear();
multiset<string> ms;

ms.insert("abc");
ms.insert("abc");
ms.insert("abc");
ms.insert("123");
ms.insert("456");
multiset<string>::iterator iter;
for (iter = ms.begin(); iter != ms.end(); iter++) {
     std::cout << *iter << std::endl;
}

哈希 map, pair

pair<int, int> p;

p = make_pair(2, 3);

pair<int, pair<int, int> > p2;

p2 = make_pair(2, make_pair(3, 4));
cout << p2.second.second << endl;   // 4
int cmp(pair<int, int> a, pair<int, int> b) {   // 从小到大排序
     return a.first <  b.first;
}

map<int, string>m;

m.insert(make_pair(1, "one"));
m.insert(make_pair(2, "two"));
map<string, float> m;
m["jack"] = 11.1;
m["bomi"] = 23.23;
m["kate"] = 34.234;

map<string, float>::iterator iter;
for(iter = m.begin(); iter != m.end(); iter++) {
        cout << (*iter).first << " : ";
        cout << (*iter).second << endl;
}
// bomi : 23.23
// jack : 11.1
// kate : 34.234

find

std::map<int, string>::iterator iter = m.find(25);
if (iter != m.end()) {...}
else {...}

自定义比较

struct mycomp {
        bool operator() (const int &a, const int &b) {
                return a > b;
        }
};

map<int, char, mycomp> m;
m[0]  = ‘a‘;
m[1]  = ‘z‘;
m[25] = ‘b‘;

std::map<int, char, mycomp>::iterator iter;
for(iter = m.begin(); iter != m.end(); iter++) {
        cout << "m[" << (*iter).first << "] = " << (*iter).second << endl;
}
// m[25] = z
// m[1] = b
// m[0] = a

允许多个 key 值

/* multiset */
multimap<string, int> m;
m.insert(pair<string, int>("jack", 400));
m.insert(pair<string, int>("kity", 200));
m.insert(pair<string, int>("memi", 500));

m.insert(pair<string, int>("jack", 300));

std::multimap<string, int>::iterator iter;
for(iter = m.begin(); iter != m.end(); iter++) {
        cout << (*iter).first << " : " << (*iter).second << endl;
}
// jack : 400
// jack : 300
// kity : 200
// memi : 500

m.erase("jack");
for(iter = m.begin(); iter != m.end(); iter++) {
        cout << (*iter).first << " : " << (*iter).second << endl;
}
// kity : 200
// memi : 500

list

list<int> l;
l.push_back(1);
l.push_front(0);
l.pop_front();
l.pop_back();
l.reverse();
l.remove(1);           // 删除所有为 1 的元素
l.erase(l.begin());  // 用迭代器删除
l.clear();
l.size();
l.sort();
l.unique();
std::list<int>::iterator iter = find(l.begin(), l.end(), 1);  // #include<algorithm>
if (iter != l.end()) { ... }
else { ... }
std::list<int>::iterator iter;
for(iter = l.begin(); iter != l.end(); iter++) {
        std::cout << *iter << std::endl;
}

std::list<int>::reverse_iterator riter;
for(riter = l.rbegin(); riter != l.rend(); riter++) {
        std::cout << (*riter) << std::endl;
}

vector

vector<int> v;          // 创建一个向量, 类似一维数组
vector<int> v[3];       // 类似 二维数组
vector<int> v(10);      // 创建 10 个元素, 每个元素都是 0
vector<int> v(10, 5);   // 创建 10 个元素, 每个元素都是 5

v.insert(5);
v.insert(v.begin(), 1); // v[0] = 1
v.push_back(5);
v.erase(v.begin());
v.erase(v.begin()+2, v.begin()+5);   // 删除 第 3, 4, 5 个
v.clear();
v.size();
v.empty();
reverse(v.begin(), v.end());
sort(v.begin(), v.end());

自定义排序

bool cmp(const int &a, const int &b) {
    return a > b? 1: 0;     // 降序
    return a < b? 1: 0;     // 升序
}
sort(v.begin(), v.end(), cmp);

常用的 STL 函数

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4820396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!