*容器 (1)顺序容器 vector[顺序表直接访问] depue[前后直接访问] list[双向链表]

vector 检索(用operator[ ])速度快

.push_back   在数组的最后添加一个数据
.pop_back 去掉数组的最后一个数据
.at 得到编号位置的数据
.begin 得到数组头的指针
.end 得到数组的最后一个单元+1的指针
.front 得到数组头的引用
.back 得到数组的最后一个单元的引用
.max_size 得到vector最大可以是多大
.capacity 当前vector分配的大小
.size 当前使用数据的大小
.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
.reserve 改变当前vecotr所分配空间的大小
.erase 删除指针指向的数据项
.clear 清空当前的vector
.rbegin 将vector反转后的开始指针返回(其实就是原来的end-)
.rend 将vector反转构的结束指针返回(其实就是原来的begin-)
.empty 判断vector是否为空
.swap 与另一个vector交换数据

deque 检索效率没vector高 两端插入和list一样

析构函数:

c.~ deque<Elem>()   ;销毁所有元素,并释放内存。

非变动性操作

c.size();         //返回当前的元素数量

c.empty();       //判断大小是否为零。等同于c.size() == 0,但可能更快

c.max_size();    //可容纳元素的最大数量

c.at(idx) ;       //返回索引为idx所标示的元素。如果idx越界,抛出out_of_range

c[idx] ;         //返回索引idx所标示的元素。不进行范围检查

c.front() ;       //返回第一个元素,不检查元素是否存在

c.back();        //返回最后一个元素

c.begin();       //返回一个随机迭代器,指向第一个元素

c.end();         //返回一个随机迭代器,指向最后元素的下一位置

变动性操作:

c1 = c2  ;        //将c2的所有元素赋值给c1;

c.assign(n , elem);    //将n个elem副本赋值给c

c.assing(beg , end);   //将区间[beg;end]中的元素赋值给c;

c.push_back(elem);   //在尾部添加元素elem

c.pop_back()    ;    //移除最后一个元素(但不回传)

c.push_front()   ;   //在头部添加元素elem

c.pop_front()    ;   //移除头部一个元素(但不回传)

c.erase(pos)    ;   //移除pos位置上的元素,返回一元素位置

                  //如 c.erase( c.begin() + 5)  //移除第五个元素

c.insert(pos , elem); //在pos位置插入一个元素elem,并返回新元素的位置

c.insert(pos , n , elem); //在pos位置插入n个元素elem,无返回值

c.insert(pos , beg , end);

c.resize(num);       //将容器大小改为num。可更大或更小。

c.resize(num , elem);  //将容器大小改为num,新增元素都为 elem

c.clear();            //移除所有元素,将容器清空

list 插入,删除元素效率高 只支持遍历 检索排序效率低

成员函数
c.begin() 返回指向链表第一个元素的迭代器。
c.end() 返回指向链表最后一个元素之后的迭代器。
c.front() 返回链表c的第一个元素。
c.back() 返回链表c的最后一个元素。
c.empty() 判断链表是否为空。
c.size() 返回链表c中实际元素的个数。
c.max_size() 返回链表c可能容纳的最大元素数量。
c.clear() 清除链表c中的所有元素。
c.rbegin() 返回逆向链表的第一个元素,即c链表的最后一个数据。
c.rend() 返回逆向链表的最后一个元素的下一个位置,即c链表的第一个数据再往前的位置。
c.assign(n,num) 将n个num拷贝赋值给链表c。
c.assign(beg,end) 将[beg,end)区间的元素拷贝赋值给链表c。
c.insert(pos,num) 在pos位置插入元素num。
c.insert(pos,n,num) 在pos位置插入n个元素num。
c.insert(pos,beg,end) 在pos位置插入区间为[beg,end)的元素。
c.erase(pos)    删除pos位置的元素。
c.push_back(num) 在末尾增加一个元素。
c.pop_back() 删除末尾的元素。
c.push_front(num) 在开始位置增加一个元素。
c.pop_front() 删除第一个元素。
c1.swap(c2); 将c1和c2交换。
swap(c1,c2); 同上。
c.sort() 将链表排序,默认升序
c.sort(comp) 自定义回调函数实现自定义排序 http://www.cnblogs.com/scandy-yuan/archive/2013/01/08/2851324.html

(2)关联容器 set[快查无重复] multiset[快查有重复] map[一对一映射无重] multimap[一对一映射有重]

set(默认排序)

平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
构造set集合主要目的是为了快速检索,不可直接去修改键值。 常用操作:
.元素插入:insert()
.中序遍历:类似vector遍历(用迭代器)
.反向遍历:利用反向迭代器reverse_iterator。
例:
set<int> s;
......
set<int>::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++)
.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
set<int> s;
s.erase(); //删除键值为2的元素
s.clear();
.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
set<int> s;
set<int>::iterator it;
it=s.find(); //查找键值为5的元素
if(it!=s.end()) //找到
cout<<*it<<endl;
else //未找到
cout<<"未找到";
.自定义比较函数
()元素不是结构体:
例:
//自定义比较函数myComp,重载“()”操作符
struct myComp
{
bool operator()(const your_type &a,const your_type &b)
[
return a.data-b.data>;
}
}
set<int,myComp>s;
......
set<int,myComp>::iterator it;
()如果元素是结构体,可以直接将比较函数写在结构体内。
例:
struct Info
{
string name;
float score;
//重载“<”操作符,自定义排序规则
bool operator < (const Info &a) const
{
//按score从大到小排列
return a.score<score;
}
}
set<Info> s;
......
set<Info>::iterator it

begin()        ,返回set容器的第一个元素

end()      ,返回set容器的最后一个元素

clear()          ,删除set容器中的所有的元素

empty()    ,判断set容器是否为空

max_size()   ,返回set容器可能包含的元素最大个数

size()      ,返回当前set容器中的元素个数

rbegin     ,返回的值和end()相同

rend()     ,返回的值和rbegin()相同

map

  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的函数

(3)容器适配器 stack[LIFO] queue[FIFO] priority_queue[优先级高的出]

stack

stack
stack 模板类的定义在<stack>头文件中。
stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要
的,在不指定容器类型时,默认的容器类型为deque。
定义stack 对象的示例代码如下:
stack<int> s1;
stack<string> s2;
stack 的基本操作有:
入栈,如例:s.push(x);
出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
访问栈顶,如例:s.top()
判断栈空,如例:s.empty(),当栈空时,返回true。
访问栈中的元素个数,如例:s.size()。 empty() 堆栈为空则返回真 pop() 移除栈顶元素(不会返回栈顶元素的值) push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素 emplace () swap()

queue

  成员函数

  • empty()判断队列空,当队列空时,返回true。
  • size()访问队列中的元素个数。
  • push()会将一个元素置入queue中。
  • front()会返回queue内的第一个元素(也就是第一个被置入的元素)。
  • back()会返回queue中最后一个元素(也就是最后被插入的元素)。
  • pop()会从queue中移除一个元素。[1] 
(constructor)Construct queue (public member function )
emptyTest whether container is empty (public member function )
sizeReturn size (public member function )
frontAccess next element (public member function )
backAccess last element (public member function )
pushInsert element (public member function )
emplace Construct and insert element (public member function )
popRemove next element (public member function )
swap Swap contents (public member function )

priority_queue

(constructor)Construct priority queue (public member function )
emptyTest whether container is empty (public member function )
sizeReturn size (public member function )
topAccess top element (public member function )
pushInsert element (public member function )
emplace Construct and insert element (public member function )
popRemove top element (public member function )
swap Swap contents (public member function )

下面是选择顺序容器类型的一些准则  0.vector 不自动排序但允许重复 list也是 set有不重复元素的特性,但其自动排序

1.如果我们需要随机访问一个容器则vector要比list好得多 。

2.如果我们已知要存储元素的个数则vector 又是一个比list好的选择。

3.如果我们需要的不只是在容器两端插入和删除元素则list显然要比vector好

4.除非我们需要在容器首部插入和删除元素否则vector要比deque好。

5.如果只在容易的首部和尾部插入数据元素,则选择deque.

6.如果只需要在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑输入时将元素读入到一个List容器,接着对此容器重新拍学,使其适合顺序访问,然后将排序后的list容器复制到一个vector容器中

一.string

输出用法见代码。

#include<iostream>
#include<string>
using namespace std;
int main()
{
string one("DZY is stupid!");
cout<<one<<endl;
string two(,'o');
cout<<two<<endl;
string three(one);
cout<<three<<endl;
one+=" Oops!";
cout<<one<<endl;
two="Sorry! That was ";
three[]='P';
string four=two+three;
cout<<four<<endl;
char alls[]="All's well that ends well";
string five(alls,);
cout<<five<<endl;
string six(alls+,alls+);
cout<<six<<',';
string seven(&five[],&five[]);
cout<<seven<<"..."<<endl;
string eight(four,,);
cout<<eight<<"in motion!"<<endl;
return ;
}

输入用法:

string stuff;
cin>>stuff;
getline(cin,stuff);
getline(stuff,':'); //终止条件
operator>>(cin,stuff);
#include <iostream>
#include <fstream> //文件操作
#include <string>
#include <cstdlib>
int main()
{
using namespace std;
ifstream fin; //文件
fin.open("tobuy.txt");//打开
if (fin.is_open() == false)//判断是否打开
{
cerr << "Can't open file. Bye.\n";
exit(EXIT_FAILURE);
}
string item;
int count = ; getline(fin, item, ':'); //文件操作需要注意输入方式,终止条件
while (fin) // while input is good
{
++count;
cout << count <<": " << item << endl;
getline(fin, item,':');//文件操作需要注意输入方式,终止条件
}
cout << "Done\n";
fin.close(); //关闭文件
// std::cin.get();
// std::cin.get();
return ;
}

tobuy.txt

sardines:chocolate ice cream:pop corn:leeks:
cottage cheese:olive oil:butter:tofu:

string---find用法

find(const string&str ,size_type pos=)const 从pos开始找否则返回string::nops
find(const char*s ,size_type pos=)const 从s开始找否则返回string::nops
find(const char*s ,size_type pos= ,size_type n)const 从pos开始,查找s的前n个字符,否则返回string::nops
find(char ch ,size_type pos=)const 从pos开始找字符ch找到返回首次出现位置,否则返回string::nops
rfind() 最后一次出现位置
find_firse_of() 找首次出现位置
find_last_of() 最后一次出现位置
find_firse_not_of() 找第一个不包含在已知参数中的字符
find_last_not_of() 找最后一个不包含在已知参数中的字符

举例

#include <iostream>
#include <algorithm>
#include <string>
using namespace std; int main()
{
string s = "helllo";
if (s.find("e") == string::npos) //yes
cout << "no" << endl;
else
cout << "yes" << endl; if (s.find("z") == string::npos) //no
cout << "no" << endl;
else
cout << "yes" << endl;
}

二.lower_bound();upper_bound()

lower_bound(a,a+n,k)在已排好序的a中利用二分法找出ai>=k的最小指针(返回值);upper_bound(a,a+n,k).......ai<=k;两个联合起来就是找k;

STL库函数 持续更新的更多相关文章

  1. STL 一些常用的STL函数(持续更新

    先说一下  一边要用到算法的东西一般要加#include<algorithm>头文件 一.栈和队列 1 栈 :一种线性表 特点  后进先出 头文件  #include<stack&g ...

  2. C++入职学习篇--代码规范(持续更新)

    C++入职学习篇--代码规范(持续更新) 一.头文件规范 在头文件中大家一般会定义宏.引入库函数.声明.定义全局变量等,在设计时最后进行分类,代码示范(自己瞎琢磨的,请多多指点): #ifndef T ...

  3. 值得学习的C/C++开源项目 持续更新

    值得学习的C语言开源项目 持续更新 文章目录 值得学习的C语言开源项目 持续更新 - 1. Webbench - 2. Tinyhttpd - 3. cJSON - 4. CMockery - 5. ...

  4. 2020年腾讯实习生C++面试题&持续更新中(3)

    2020年腾讯实习生C++面试题&持续更新中(3) hello,大家好,我是好好学习,天天编程的天天. 来给大家大家分享腾讯实习生面经了. 天天希望大家看到面经后一定要做充分的准备,结合自己掌 ...

  5. 2020年腾讯实习生C++面试题&持续更新中(1)

    2020年腾讯实习生C++面试题&持续更新中(1) 腾讯面试整理(1) 最近大三的学生找实习生的同学非常多,给大家分享一篇腾讯实习生的面试题,关于面试题,会持续更新~~~ 也算是今天开通博客的 ...

  6. 2020年腾讯实习生C++面试题&持续更新中(5)

    2020年腾讯实习生C++面试题&持续更新中(5) 大家好呀,我是好好学习天天编程的天天~ 昨天一位小伙伴反馈已经拿到了腾讯offer,很是替小伙伴的激动~ 那今天还是持续给大家分享面经,希望 ...

  7. 神技!微信小程序(应用号)抢先入门教程(附最新案例DEMO-豆瓣电影)持续更新

    微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...

  8. iOS系列教程 目录 (持续更新...)

      前言: 听说搞iOS的都是高富帅,身边妹子无数.咱也来玩玩.哈哈. 本篇所有内容使用的是XCode工具.Swift语言进行开发. 我现在也是学习阶段,每一篇内容都是经过自己实际编写完一遍之后,发现 ...

  9. ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)

    前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...

随机推荐

  1. web前端开发教程系列-2 - 前端开发书籍分享

    目录: 前言 一. CSS 二. JavaScript 三. jQuery 四. 后记   前言 前端书籍在每个商城或书架上面都是琳琅满目,很多初学者又不能很好的判断书的质量或层次.因为今天给同学们分 ...

  2. IntelliJ IDEA 设置 编辑器字体大小

    1,打开File->settings 2,在Edit->colors->Fonts下创建新字体 保存即可.

  3. Java设计模式-代理模式(Proxy)

    其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你 ...

  4. 关于MyEclipse对Struts2配置文件较检异常 Invalid result location value/parameter

    有时候Struts.xml配置没有错误,完全可以顺利运行,而MyEclipse9以上版本却经常出现一大坨错误标识,错误信息是 Invalid result location value/paramet ...

  5. ORACLE创建表空间、创建用户、更改用户默认表空间以及授权、查看权限

    Oracle创建用户.表空间.导入导出....命令 //创建临时表空间 create temporary tablespace ext_temptempfile 'D:\oracle\product\ ...

  6. BZOJ-1934 Vote 善意的投票 最大流+建图

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1551 Solved: 951 [Submit][S ...

  7. spring 第一篇(1-1):让java开发变得更简单(下)转

    spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...

  8. asp.net input怎么获取值

    前台: <input type="hidden" name="content" value="content"> 后台: Req ...

  9. junit加载

    Run as junit 不会出现,把junit 包倒入lib文件夹中,在类的后面加上extends TestCase,此时上方会导入一个包:import junit.framework.TestCa ...

  10. C标准函数库(常用部分)