编写一个C++程序:ios
vector初始化两种方法:算法
vector<int>elem_seq(seq_size);编程
elem_seq[0]=1app
elem_seq[1]=2;less
另外一种方法则是利用一个已初始化的array做为vector的初值函数
int elem_vals[seq_size]={元素}.net
vector<int>elem_seq(elem_vals,elem_vals+seq_size};orm
vector<int > m_vtmp;
m_vtmp.assign(arr,arr+5);对象
rand()和srand()都是标准程序库提供的所谓伪随机数产生器.srand()的参数是所谓随机数产生器种子(seed)。要知道,每次调用rand(),都回返回一个介于0和“int 所能表示的最大整数”间的一个整数,如今,将随机数产生器的种子(seed)设为5,咱们就能够将rand()的返回值限制在0和5之间这两个函数的声明式位于cstdlib头文件中blog
欲对文件进行读写操做,首先得含入fstream头文件
#include<fstream>
为了开启一个可供输出的文件,咱们顶一个一个ofstream(供输出用的file stream)对象,并将文件名传入:
ofstream outfile("seq_data.txt")若是指定文件不存在,便会有一个文件被产生出来并开启做为输出只用,若是存在,这个文件被开启做为输出之用,而文件原来的数据会被丢弃.
若是不想丢弃数据,提供第二个参数ofstream outfile("seq_data.txt",ios_base::app);
if(!outfile)检验是否开启成功,cerr表明标准错误输出设备,cerr的输出结果没有缓冲,他会当即显示到用户终端机
else outfile<<"";
同理可供读取的文件,咱们可顶一个一个ifstream(input file stream)对象,并将文件名传入,若是文件未能开启成功
if(!infile)
else while(infile>>name)
若是想同时读写一个文件,咱们定义一个fstream对象,为了以追加模式开启,咱们传入第二参数值
fstream iofile("seq_data.txt",ios_base::in|ios_base::app);
面向过程的编程风格
能够这样,更高的可见度void display(const vector<int>&,ostream&=cout);
void display(const vector<int>&vec,ostream &os)
{}
至于函数定义处,并无指定参数的默认值
将函数指定为inline,体积小,常被调用,所从事的计算并不复杂
inline函数的定义经常被置于头文件中,因为编译器必须在它被调用的时候加以展开,因此这个时候起定义必须有效地
template<typename elemType>
function template 同时也能够是重载函数.
关键字enum以后是一个无关紧要的识别名称,定义处枚举类型,大括号里头是以逗号为区隔的列表,表中每一个项目成为枚举成员
默认状况下,第一个枚举成员的值为0,接下来的每一个枚举成员都比前面一个多1
const object就和inline函数同样,是“一次定义规则”下的例外,const object的定义只要一出文件以外便不可见,这意味着咱们能够在多个程序代码文件中加以定义,不会致使任何错误,
::表示此iterator乃是位于string vector定义式内的嵌套型别
使用序列式容器
序列式容器用来维护一组排列有序,型别相同的元素,其中有第一,第二,。。。。以此类推,乃至最后一个元素
vector和list是两个最主要的序列式容器,deque(双向队列)
全部容器类的共同操做
1,equality(==)和(inequality)(!=)运算符,返回true或false
2,assignment(=)运算符,将某个容器复制给另外一个容器
3,empty()会在容器无任何元素时返回true,不然返回false
4,size()传用容器内当前含有的元素数目
5,clear()清除全部元素
list不支持偏移算法
使用泛型算法
1,find
2,binary_search maxelement,copy
3,count
4,search
find_if
function objects
#include<functional>
sort(vec.begin(),vec.end(),greater<int>());
binary_search(vec.begin(),vec.end,elem,greater<int>());
另外数种稍加变化的方式显示Fibonacci数列,每一个元素自身相加,和自身相乘,被加到对应的pell数列。。。。等等,作法之一是使用泛型算法transform()并搭配plus<int>和multiplies<int>
adapter(配接器)
标准程序库提供两个binder adapter(绑定配接器);bind1st会将指定值绑定至第一操做数,bind2nd则将指定值绑定之第二操做数。
(关于bind2nd的介绍http://blog.csdn.net/simahao/article/details/405455)
另外一种adaptor是所谓的negator,它会逆转function object的真伪值,not1可逆转unary function object的真伪值,not2可逆转binary
function object的真伪值,
find_if的用法http://blog.csdn.net/hj490134273/article/details/6051080
欲查询map内是否存在某个key,有三种方法
1.最直观的作法就是吧key当索引使用
缺点是,若是咱们用来索引的那个key并不存在map内,则呢个key会自动被加入map,而其value将是0
2.map查询法是利用map的find()函数,若是key已置于其中,find()会返回一个iterator,指向keyvalue造成一个pair,反之则返回end()
3.map查询发是利用map的count()函数,count()会返回某特定项目在map内的个数:
3.8使用set
set<string>
对于任何key值,set只能存储一份,若是要存储多份相同的key值,必须使用multiset
默认状况下,set元素,依据其所属型别的less-than,运算符进行排列
set<int>iset(vec.begin(),vec.end())