C++ STL常用操作

C++ 中的STL及其它数据结构的五种基本操作(算法):排序、增、删、改、查。

STL标准入门汇总:http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html

C++ STL一般总结:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/22/2603525.html

C++ STL学习:http://blog.chinaunix.net/uid-24219701-id-2181266.html

 

STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)。

几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类。
container(容器):
数组、堆栈、队列、链表或二叉树、红黑树。
algorithm(算法):
排序、增、删、改、查。等操作方法。
iterator(迭代器):

访问容器的一种类似指针的工具。

 

//1.定义和初始化  
    vector<int> vec1;    //默认初始化,vec1为空  
    vector<int> vec2(vec1);  //使用vec1初始化vec2  
    vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2  
    vector<int> vec4(10);    //10个值为的元素  
    vector<int> vec5(10,4);  //10个值为的元素  
//2.常用操作方法  
    vec1.push_back(100);            //添加元素  
    int size = vec1.size();         //元素个数  
    bool isEmpty = vec1.empty();    //判断是否为空  
    cout<<vec1[0]<<endl;        //取得第一个元素  
    vec1.insert(vec1.end(),5,3);    //从vec1.back位置插入个值为的元素  
    vec1.pop_back();              //删除末尾元素  
    vec1.erase(vec1.begin(),vec1.end());//删除之间的元素,其他元素前移  
    cout<<(vec1==vec2)?true:false;  //判断是否相等==、!=、>=、<=...  
    vector<int>::iterator iter = vec1.begin();    //获取迭代器首地址  
    vec1.clear();                 //清空元素  
//3.遍历  
    //下标法  
    int length = vec1.size();  
    for(int i=0;i<length;i++)  
    {  
       cout<<vec1[i];  
    }  
    cout<<endl<<endl;  
    //迭代器法  
    vector<int>::const_iterator iterator = vec1.begin();  
    for(;iterator != vec1.end();iterator++)  
    {  
       cout<<*iterator;  
    }  

 

2.数组转置 (<algorithm> reverse)
     reverse(v.begin(),v.end())

 

#include<vector>  
#include<algorithm>  
using namespace std;  
int main()  
{  
    vector<int> v;  
    for(int i = 0; i < 10; ++i)  
    {  
        v.push_back(i);  
    }  
    for(vector<int>::iterator it = v.begin(); it != v.end(); ++it)  
    {  
        cout << *it << " ";  
    }  
    cout << endl;  
    reverse(v.begin(),v.end());  
    for(vector<int>::iterator it = v.begin(); it != v.end(); ++it)  
    {  
        cout << *it << " ";  
    }  
    cout << endl;  
    return 0;  
}</span>  

一,Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.

assign() 给list赋值 
back() 返回最后一个元素 
begin() 返回指向第一个元素的迭代器 
clear() 删除所有元素 
empty() 如果list是空的则返回true 
end() 返回末尾的迭代器 
erase() 删除一个元素 
front() 返回第一个元素 
get_allocator() 返回list的配置器 
insert() 插入一个元素到list中 
max_size() 返回list能容纳的最大元素数量 
merge() 合并两个list 
pop_back() 删除最后一个元素 
pop_front() 删除第一个元素 
push_back() 在list的末尾添加一个元素 
push_front() 在list的头部添加一个元素 
rbegin() 返回指向第一个元素的逆向迭代器 
remove() 从list删除元素 
remove_if() 按指定条件删除元素 
rend() 指向list末尾的逆向迭代器 
resize() 改变list的大小 
reverse() 把list的元素倒转 
size() 返回list中的元素个数 
sort() 给list排序 
splice() 合并两个list 
swap() 交换两个list 

 

unique() 删除list中重复的元素

 

 

二,map的基本操作函数:
C++Maps 是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数

参考:http://blog.csdn.net/flqbestboy/article/details/8184484

 

三,vector的用法

参考:http://blog.chinaunix.net/uid-26000296-id-3785610.html

1. 在C++中的详细说明
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,
简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

2. 使用vector,
必须在你的头文件中包含下面的代码:
  #include 

vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:
  using std::vector;
  vector vInts;
  
或者连在一起,使用全名: std::vector vInts;
  
建议使用全局的命名域方式:using namespace std;


3. 初始化   
vector                 // 创建一个空的vector。
vector c1(c2)          // 复制一个vector
vector c(n)            // 创建一个vector,含有n个数据,数据均已缺省构造产生
vector c(n, elem)      // 创建一个含有n个elem拷贝的vector
vector c(beg,end)      // 创建一个含有n个elem拷贝的vector


4. 析构函数
c.~vector ()           // 销毁所有数据,释放内存


5. 成员函数
c.assign(beg,end)c.assign(n,elem) 将[beg; end)区间中的数据赋值给c。将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)
swap(c1,c2)        // 将c1和c2元素互换。同上操作。

operator[]         // 返回容器中指定位置的一个引用。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值