STL常用容器和算法

主要是方便查阅,每次都要去网上找感觉比较麻烦,作为笔记写在这里。这里是我在做算法题的时候,需要去查阅的STL中的容器和算法,所以,最常用的这里没有列举。

string

#include 
#include 
#include 
using namespace std;

int main(int argc, char const *argv[])
{
    string s;
    // getline(cin,s); //读取一行,以换行作为分隔符
    // cin>>s; //读取一个字符串,以空格、换行作为分隔符
    int num = 12345678;
    s = to_string(num); //数字转字符串

    int p1 = s.find("3",0); //字符串查找
    int p2 = s.find('4',0);
    if(p1 != string::npos && p2 != string::npos){
        s = s.substr(p1,p2 - p1 + 1);
        cout<= '0' && c <= '9'){
            int tmp;
            iss>>tmp;
            oss<>c;
        }
    }
    cout<

正则表达式

遇到字符串的问题,特别是匹配的问题,可以先考虑能否用正则表达式处理。个人感觉,正则表达式算是一个处理字符串神器。

使用正则表达式需要使用头文件regex,其中,有以下常用组件。

  • regex 表示有一个正则表达式的类
  • regex_match 将一个字符序列与一个正则表达式匹配
  • regex_search 寻找第一个与正则表达式匹配的子序列
  • regex_replace 使用给定格式替换一个正则表达式
  • sregex_iterator 迭代器适配器,调用regex_search来遍历一个string中所匹配的子串
  • smath 容器类,保存在string中搜索的结果
#include 
#include 
#include 
using namespace std;


int main(int argc, char const *argv[])
{
    /* 检查一个字符串是否为一个有效的ip地址 regex构造时可能会抛出异常*/
    regex ip("^((25[0-5]|2[0-4]\\d|[1]{1}\\d{1}\\d{1}|[1-9]{1}\\d{1}|\\d{1})($|(?!\\.$)\\.)){4}$");
    vector v = {"127.0.0.1","127.0.1","256.0.0.0"};
    for(int i=0;istr()<<" ";
    }
    cout<

vector

#include 
#include 
using namespace std;

int main(int argc, char const *argv[])
{
    vector v;
    for(int i=0;i<10;i++){
        v.push_back(i);
        /* size:存储的数据的大小 capacity:分配空间的大小 */
        cout<::iterator it = v.begin();
    while(it != v.end()){
        if(*it % 2 == 1){
            it = v.erase(it);
        }else{
            ++it;
        }
    }

    for(int i=0;i

queue、dequeue和priority_queue

#include 
#include 
using namespace std;

struct cmp{
    bool operator()(int a,int b){
        return a < b;
    }
};

int main(int argc, char const *argv[])
{
    deque deq;
    deq.push_front(2);
    deq.push_back(1);
    deq.pop_back();
    deq.pop_front();
    deq.front();
    deq.back();
    priority_queue,cmp> pq;
    pq.push(1);
    pq.pop();
    pq.top();
    return 0;
}

set和map

set和map在刷题的过程中,主要实现动态地查找和更新。个人感觉需要掌握的就是插入、删除,查找和更新。

#include 
#include 
#include 
using namespace std;

int main(int argc, char const *argv[])
{
    map word;
    for(int i=0;i<10;i++){
        string s;
        char c = 'A' + i;
        s += c;
        word[s] = 1; //如果有,就赋值,没有,就插入新的记录
    }
    if(word.find("A") == word.end()){
        word.insert(make_pair("A",1)); // insert插入时,如果关键字在记录中,什么也不做
    }else{
        word["A"] ++;
    }
    word.erase("B");
    for(map::iterator i = word.begin();i != word.end();++i){
        cout<first<<" "<second< mark;
    for(int i=0;i<10;i++){
        mark.insert(i);
    }
    for(set::iterator i = mark.begin();i != mark.end(); ){
        if(*i % 2 == 1){
            i = mark.erase(i);
        }else{
            i++;
        }
    }
    for(set::iterator i = mark.begin();i != mark.end(); ++i){
        cout<<*i<<" ";
    }
    cout<

常用算法

lambd表达式

C++11支持lambd表达式,个人感觉写算法的时候,还是这个最好用。因为以前使用的是Java,对于不能创建一个匿名对象作为参数还是不习惯。现在C++也支持这种格式。

[capture list](parameter list)->return type {function body}

capture list表示要捕捉的局部变量。

排序和二分查找

#include 
#include 
#include 
using namespace std;

int main(int argc, char const *argv[])
{
    vector v = {2,6,1,5,9,0,3,8,7,4};
    vector v1 = {5,9};

    vector::iterator i = find(v.begin(),v.end(),3); // 查找元素
    cout<< i - v.begin() <

你可能感兴趣的:(STL常用容器和算法)