編寫一個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())