【STL】初识STL 系列1

C++ Primer Plus 第16章读书笔记。

总结:

1. vector 模板

.size()

.swap()         //  xxx.swap(yyy)

.begin()  /   .end()                            语法:vector <double > ::iterator pd = scores.begin();

 for ( auto pd = scores.begin; pd != scores.end(); pd++)

.push_back()   ,                             自动调整内存大小。

.erase(p )   /  erase ( p, q )               P指向元素或 [ p , q ) 区间

.erase( xx.begin() . xx. begin() +n )    迭代器 可以用+ n 来表示

.insert ( p,i,j )  /  insert( p, t)  /   insert ( p, n , t)  

2. for_each()   //  random_shuffle()   //  sort()   

这些 直接是函数括号形式,不是对象调用的方法。

设ShowReview为一个cout的函数对象。

for_each( xx.begin(), xx. end(0 , ShowReview)   

sort( xxx.begin() , xxx. end() )                                //   按照默认的函数的排序。

sort (xxx. begin () , xxx. end() , WorseThan )        // 按照自定义的WorseThan函数 排序。

random_shuffle( xxx.begin() , xxx. end() ). 

3. 基于范围的FOR 循环。 C++11

double prices[5] ;

for_each( prices. begin(), prices.end(), ShowReview)

等价于  for (auto x : prices) ShowReview ( x )

auto 会自动获取prices 这一类的类型,FOR定义了X,函数直接使用X的范围。

4. 对迭代器 进行  * 解除引用。

vector < double > :: iterator pr ;

for ( pr = xx.begin() ; pr != xx.end() ; pr++)

cout << *pr <<endl;                   // * pr 调出指向的 值。(或存储的)

可化简 :

for (auto pr = xx.begin() ; pr != xx.end() ; pr++)

cout << *pr <<endl;     // 可以少一步声明 pr 类型, C++11

5.  copy()

copy (  xx.begin() , xx. end()  , pos)  

pos位置可以表示输出流的迭代器,有ostream_iterator 模板,

# include < iterator>

ostream_iterator< int, char>  out_iter ( cout , "  ")      定义一个输出的函数对象。“  ”为数据项的间隔

这样就可以  copy (xx. begin() ,xx.end() ,out_iter)  直接 把 " xx " 内容全部输出到cout.

6.  reverse iterator

.rbegin()   /  . rend()                                   反转迭代器

copy( xx.rbegin.() , xx.rend() , pos)          将文件反转后输出到POS。(从后向前)

猜你喜欢

转载自blog.csdn.net/shengda_mao1118/article/details/81604990