c++常用STL介绍

1. string介绍

(1)string类的构造函数如下: 
    a) string s; //生成一个空字符串
    b) string s(str) //拷贝构造函数 生成str的复制品 
    c) string s(str,stridx) //将字符串str"始于位置stridx"的部分当作字符串的初值 
    d) string s(str,stridx,strlen) //将字符串str"始于stridx且长度顶多strlen"的部分作为字符串的初值 
    e) string s(cstr) //C字符串作为s的初值 
    f) string s(chars,chars_len) //C字符串前chars_len个字符作为字符串s的初值。 
    g) string s(num,c) //生成一个字符串,包含numc字符 
    h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值 
(2)string常用函数如下:

    a) =,assign() //赋以新值 
    b) swap() //交换两个字符串的内容 
    c) +=,append(),push_back() //在尾部添加字符 
    d) insert() //插入字符 
    e) erase() //删除字符 
    f) clear() //删除全部字符 
    g) replace() //替换字符 
    h) + //串联字符串 
    i) ==,!=,<,<=,>,>=,compare() //比较字符串 
    j) size(),length() //返回字符数量 
    k) max_size() //返回字符的可能最大个数 
    l) empty() //判断字符串是否为空 
    m) capacity() //返回重新分配之前的字符容量 
    n) reserve() //保留一定量内存以容纳一定数量的字符 
    o) [ ], at() //存取单一字符 
    p) >>,getline() //stream读取某值 
    q) << //将谋值写入stream 
    r) copy() //将某值赋值为一个C_string 
    s) c_str() //将内容以C_string返回 
    t) data() //将内容以字符数组形式返回 
    u) substr() //返回某个子字符串 
    v)查找函数 
    w)begin() end() //提供类似STL的迭代器支持 
    x) rbegin() rend() //逆向迭代器 
    y) get_allocator() //返回配置器

2. vector介绍

(1)vector构造函数如下:
    vector<Elem> c 创建一个空的vector。

    vector <Elem> c1(c2) 复制一个vector。

    vector <Elem> c(n) 创建一个vector,含有n个数据,数据均已缺省构造产生。

    vector <Elem> c(n, elem) 创建一个含有n个elem拷贝的vector。

    vector <Elem> c(beg,end) 创建一个以[beg;end)区间的vector。

(2)vector成员函数如下:

    c.assign(beg,end) 将[beg; end)区间中的数据赋值给c。

    c.assign(n,elem) 将n个elem的拷贝赋值给c。
    c.at(idx)传回索引idx所指的数据,如果idx越界,抛出out_of_range。
    c.back() 传回最后一个数据,不检查这个数据是否存在。
    c.begin() 传回迭代器重的可一个数据。
    c.capacity() 返回容器中数据个数。
    c.clear() 移除容器中所有数据。
    c.empty() 判断容器是否为空。
    c.end() 指向迭代器中的最后一个数据地址。
    c.erase(pos) 删除pos位置的数据,传回下一个数据的位置。

    c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。
    c.front() 传回地一个数据。

    get_allocator 使用构造函数返回一个拷贝。
    c.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置。

    c.insert(pos,n,elem) 在pos位置插入n个elem数据。无返回值。

    c.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值。
    c.max_size() 返回容器中最大数据的数量。
    c.pop_back() 删除最后一个数据。
    c.push_back(elem) 在尾部加入一个数据。
    c.rbegin() 传回一个逆向队列的第一个数据。
    c.rend() 传回一个逆向队列的最后一个数据的下一个位置。
    c.resize(num) 重新指定队列的长度。
    c.reserve() 保留适当的容量。
    c.size() 返回容器中实际数据的个数。
    c1.swap(c2) 将c1和c2元素互换。

3. map介绍

在STL 的头文件<map>中定义了模板类map 和multimap,用有序二叉树来存贮类型为pair<const Key, T>的元素对序列。序列中的元素以const Key部分作为标识,map 中所有元素的Key 值都必须是唯一的,multimap 则允许有重复的Key 值。可以将map 看作是由Key 标识元素的元素集合,这类容器也被称为“关联容器”,可以通过一个Key 值来快速确定一个元素,因此非常适合于需要按照Key值查找元素的容器。map 模板类需要四个模板参数,第一个是键值类型,第二个是元素类型,第三个是比较算子,第四个是分配器类型。其中键值类型和元素类型是必要的。map 的基本操作有:

1、定义map 对象,例如:

map<string, int> m;

2、向map 中插入元素对,有多种方法,例如:

m[key] = value;[key]操作是map 很有特色的操作,如果在map 中存在键值为key 的元素对,则返回该元素对的值域部分,否则将会创建一个键值为key 的元素对,值域为默认值。所以可以用该操作向map 中插入元素对或修改已经存在的元素对的值域部分。

m.insert( make_pair(key, value) );

也可以直接调用insert 方法插入元素对,insert 操作会返回一个pair,当map 中没有与key 相匹配的键值时,其first 是指向插入元素对的迭代器,其second 为true;若map 中已经存在与key 相等的键值时,其first 是指向该元素对的迭代器,second 为false。

3、查找元素对,例如:

int i = m[key];

要注意的是,当与该键值相匹配的元素对不存在时,会创建键值为key 的元素对。

map<string, int>::iterator it = m.find(key);

如果map 中存在与key 相匹配的键值时,find 操作将返回指向该元素对的迭代器,否则,返回的迭代器等于map 的end()(参见vector 中提到的begin和end 操作)。

4、删除元素对,例如:

m.erase(key);

删除与指定key 键值相匹配的元素对,并返回被删除的元素的个数。

m.erase(it);

删除由迭代器it 所指定的元素对,并返回指向下一个元素对的迭代器。

5.其他函数

m.begin() map开始位置的迭代器

m.end() map结束位置的迭代器

m.clear()清空map

m.empty()判断map是否为空

m.count()统计map有多少节点

m.lower_bound()返回第一个大于或等于给定关键字的元素的定位器

m.upper_bound()返回第一个大于给定关键字的元素的定位器

m.equal_range() 返回一对定位器,pair<const_iterator,const_iterator>第一个定位器是第一个大于或等于给定关键字的元素的定位器,第二个定位器是第一个大于给定关键字的元素的定位器。相当于分别执行了lower_bound和upper_bound

m[] m["aaa"] = 1 将关键字aaa的值置为1,int a = m["aaa"]取出关键字aaa的值


留言: