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。(从后向前)