1. using聲明和using指示html
using namespace std;---using 指示ios
using std::cin;---using 聲明算法
http://blog.csdn.net/ljq32/article/details/7950629安全
http://blog.csdn.net/digu/article/details/1606563spa
2. const迭代器 const_iterator線程
vector<int> data(10);指針
const迭代器: const vector<int>::iterator iter=data.begin();htm
相似於常量指針,所指對象不可變,但能夠改變所指對象的值
const_iterator: vector<int>::const_iterator iter=data.begin();
相似於指向常量的指針,所指對象能夠變換,可是對象的值不容許改變。
3.stl的線程安全性
<<Effective STL>> tips 12:
1)在每次調用容器的成員函數期間都要鎖定該容器。
2)在每一個容器返回的迭代器(例如經過調用begin或end)的生存期以內都要鎖定該容器。
3)在每一個在容器上調用的算法執行期間鎖定該容器。(這事實上沒有意義,由於,正如條款32所解釋的,算法沒有辦法識別出它們正在操做的容器。不過,咱們將在這裏檢驗這個選項,由於它的教育意義在於看看爲何即便是可能的它也不能工做。)
http://blog.csdn.net/zdl1016/article/details/4161427
4.文件結束符
EOF的兩點總結(主要指普通終端中的EOF)
1.EOF做爲文件結束符時的狀況:
EOF雖然是文件結束符,但並非在任何狀況下輸入Ctrl+D(Windows下Ctrl+Z)都可以實現文件結束的功能,只有在下列的條件下,才做爲文件結束符。
(1)遇到getcahr函數執行時,要輸入第一個字符時就直接輸入Ctrl+D,就能夠跳出getchar(),去執行程序的其餘部分;
(2)在前面輸入的字符爲換行符時,接着輸入Ctrl+D;
(3)在前面有字符輸入且不爲換行符時,要連着輸入兩次Ctrl+D,這時第二次輸入的Ctrl+D起到文件結束符的功能,至於第一次的Ctrl+D的做用將在下面介紹。
其實,這三種狀況均可以總結爲只有在getchar()提示新的一次輸入時,直接輸入Ctrl+D才至關於文件結束符。
http://blog.csdn.net/doupei2006/article/details/7447650
5.cin.clear()
iostream是由istream(輸入流)和ostream(輸出流)派生.因此在iostream中就有了輸入和輸出的相關對象:
一、cin 表示標準輸入(standard input)的istream類對象,cin使咱們能夠從設備讀取數據。
二、cout 表示標準輸出(standard output)的ostream類對象。對應於標準輸出流,默認狀況下是顯示器。這是一個被緩衝的輸出,能夠被重定向。
三、cerr 對應標準錯誤流,用於顯示錯誤消息。默認狀況下被關聯到標準輸出流,但它不被緩衝,也就說錯誤消息能夠直接發送到顯示器,而無需等到緩衝區或者新的換行符時,才被顯示。通常狀況下不被重定向。
cout與cerr的區別:cout的輸出能夠重定向到一個文件中,而cerr必須輸出在顯示器上。
1. cin.get(),它是一個讀取單個字符的方法。字符變量=cin.get(),至關於cin.get(字符變量)。
char cstr;
cstr = cin.get(); //讀取單個字符,在屏幕輸入,至關於cin.get(cstr);
cout<<cstr<<endl; //輸出剛剛載入的單個字符
2.cin.getline(),則是獲取一整行文本。如下是cin.getline()原形:
getline(char *line,int size,char='/n')
第一個是字符指針,第二個是字符長度,第三個爲結束標識符。
cin.getline(str, sizeof(str), 'X'); //以單個英文字母'X'做爲終止標識符
例六:
#include
using namespace std;
int main()
{
char str1[200];
char str2[200];
cin.getline(str1, sizeof(str1), 'X'); //以單個英文字母'X'做爲終止標識符
cin.getline(str2, sizeof(str2), 'Y'); //以單個英文字母'Y'做爲終止標識符
cout<<"第一行是:"<<str1<<endl; //輸出
cout<<"第二行是:"<<str2<<endl;
system("pause");
}
輸入:abcdXXXefghYYYigkl(回車)
輸出: 第一行是:abcd
第二行是:XXefgh
如上可知,當遇到第一個結束符'X'結束輸出abcd,以後遇到第一個結束符'Y'結束輸出XXefgh。
3.
接下來談談cin.clear()的做用,第一次看到這東西,不少人覺得就是清空cin裏面的數據流,而實際上卻與此相差甚遠,首先看看如下代碼:
例七:
#include
using namespace std;
int main()
{
int a;
cin>>a;
cout<<cin.rdstate()<<endl;
if(cin.rdstate() == ios::goodbit)
{
cout<<"輸入數據的類型正確,無錯誤!"<<endl;
}
if(cin.rdstate() == ios_base::failbit)
{
cout<<"輸入數據類型錯誤,非致命錯誤,可清除輸入緩衝區挽回!"<<endl;
}
system("pause");
}
咱們定義要輸入的變量是整型,但若是輸入了英文字母或者漢字,那就會發生錯誤,cin裏有個方法能檢測這個錯誤,就是cin.rdstate()。
當cin.rdstate()返回0(即ios::goodbit)時表示無錯誤,能夠繼續輸入或者操做,若返回2則發生非致命錯誤即ios::failbit,則不能繼續輸入或操做。而cin.clear()則能夠控制咱們此時cin裏對這個問題的一個標識。語發以下:
cin.clear(標識符);
標識符號爲:
經過cin.clear,咱們能確認它的內部標識符,若是輸入錯誤則能從新輸入。結合真正的清空數據流方法cin.sync(),請看下例:
例八:
#include
using namespace std;
int main()
{
int a;
while(true)
{
cin>>a;
if(!cin) //條件可改寫爲cin.fail()
{
cout<<"輸入類型錯誤,請從新輸入!"<<endl;
cin.clear(); //復位標誌,將cin中的全部標誌設置爲有效狀態
cin.sync(); //清空流
}
else
{
cout<<a<<endl;
break;
}
}
system("pause");
}
上面的cin默認值爲非0,當輸入爲非整形時,它的狀態標識符改成fail(即0),再用cin.clear()讓錯誤標識改回爲非0,能夠繼續輸入,再清空流數據繼續輸入。若是沒有了cin.clear(),則會進入死循環,其過程爲咱們輸入了英文字母,它的狀態標識便爲fail,當運行到條件判斷時,便老是回到錯誤的條件表示裏,而且再也沒有辦法輸入,由於錯誤的表示關閉了cin,因此會進入死循環。能夠分別註釋掉cin.clear()和cin.sync()進行驗證。
http://blog.sina.com.cn/s/blog_a6fb6cc90101bg1n.html