essential c++ 隨筆

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

相關文章
相關標籤/搜索