1.采用預處理功能編寫頭文件
? ? ? ? ?在頭文件定義(頭文件中的內容是只能被定義一次的實體)過程中,為了防止頭文件重復包含的情況,采用預處理器的一個頭文件保護符功能,格式為:{? #ifndef 預處理變量(通常大寫)? ? ? ? ?#define? 預處理變量? ? ?#endif },多使用預處理的功能可以增強代碼的魯棒性和移植能力,但是增加了代碼的理解能力。
? ? ? ? ?預處理變量無視C++語言中的作用域規則,它是在程序預處理階段將程序中的所有預處理變量用實際的變量來進行替代。另外如果使用上述格式的預處理功能定義了預處理變量,則后面的程序中如果遇到預處理變量,則可以避免重復定義。
2.string初始化和字符操作
? ? ? ? ? string是C++語言中定義的一種復雜數據類型(可變長字符串),它的初始化方式可以分為兩種,一種是利用“=”操作的拷貝初始化,另外一種是利用構造函數完成直接初始化。
? ? ? ? ? 拷貝初始化方式:string s2=s1;? string s3="value"(拷貝字符串除最后一個字符的所有字符給字符串s3);’
? ? ? ? ? 直接初始化:string s4(s2),? string s5("value"),? string s6(n,'c');
? ? ? ? ? string提供一個size函數,返回string對象的大小,它的數據類型為一個string::size_type,為一個用typedef定義的變量。
? ? ? ? ? 標準庫允許將string對象和string對象或string對象和字面值常量進行運算(字面值常量可以轉換為string對象),但是不允許加號兩邊都是字面值常量。
? ? ? ? ? C++11提供一種范圍for語句來對string對象中的每一個字符才做,結合cctype(兼容C中的ctype.h文件,C++繼承C中的文件只是將C中的頭文件刪去.h后綴,同時在前面添加一個c)中的字符處理和判斷函數,就能完成對string對象中的字符處理。使用for循環修改string對象,需要定義字符引用。cctype中的處理字符的函數:
? ? ? ? ? isalnum(c):c是字母或者數字為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?islower(c):c為小寫為真;
? ? ? ? ? isalpha(c):c是字母為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??isupper(c):c為大寫為真;
? ? ? ? ? isdigit(c):c是數字為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tolower(c):c為大寫時轉小寫,否則不變;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ispunct(c):c是標點符號為真;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?toupper(c):c為小寫時轉大寫,否則不變;
? ? ? ? ? isspace(c):c是空格為真;
? ? ? ? ? string支持[ ]操作符,可以使用[ ]訪問string中的任意字符,但是必須保證其中的數值在0~string.size()之間,否則會產生數據越界的現象。
3.vector初始化和迭代器
? ? ? ? ? vector是C++語言定義的一個類模板,而不是一種類型,是一個可變長的向量。vector的初始化方式有三種:拷貝初始化,直接初始化和初始化列表的方式。拷貝初始化通常與賦值與賦值運算符“=”有關,如vector<int> v2=v1,直接初始化是采用初始化函數,如vector<int> v3(n,val);vector<int> v4(v3);vector<int> v5(n),初始化列表是采用花括號的方式,如vector<int> v6{1,3,5}或vector<int> v7={1,3,5};
? ? ? ? ? 如果vector的初始化中只提供容器中元素的數量,不提供初始值,則容器中的初始值會執行默認的初始化。如果沒有默認的初始化值,則容器創建失敗。如果在使用花括號列表初始化容器時,但是花括號中的值不能用來列表初始化,則考慮用這樣的值來構造vector對象,如vector<string> v8{10,"hi"}(v8中有10個“hi”的字符串)
? ? ? ? ? vector中定義了一個size函數來定義容器中元素的個數,數據類型為vector<int>::size_type.vector可以使用下標來訪問已存在的對象,但不能利用下標來添加對象(可以采用范圍for語句來確定下標是否合法)。
? ? ? ? ? vector中定義了一種begin和end兩種迭代器,迭代器的類型為vector<int>::iterator.C++11中增加了兩個迭代器cbegin和cend,對應的迭代器類型為vector<int>::const_iterator.
? ? ? ? ? 對于vector中定義的迭代器,如果期間vector中的值發生增加或者減少,則所定義的迭代失效。vector和string支持迭代器加減運算,迭代器加減一個整形得到的仍為一個迭代器(注意不能越界,begin,end),兩個迭代器相減,得到一個名字為difference_type的有符號整形。