using 宣告語句:編譯器從操作符左側所示作用域尋找右側那個名字
using namespace :: name
注:標頭檔案中不能有using宣告,標頭檔案中的內容會拷貝到所引用它的檔案中去,會引起名字衝突
標準庫型別string:表示可變長的字串行。包含在string標頭檔案
string的初始化方式
string s1
string s2(s1) s2是s1的副本
string s2 = s1 s2是s1的副本
string s3(「value」) s3是value的副本,除了字面值最後那個空字元
string s3 = 「value」
string s4(n,『c』) s4初始化為連續n個字元c組成的字串直接初始化和拷貝初始化(參考上述例子)
string 物件上的操作
s[n]、s.empty( )、s.size()、getline(is,s)等
getline(is,s):從is中讀取一行賦給s,返回isstring物件會自動忽略開頭的空白並從第乙個真正的字元開始讀起,直到遇到下一處空白。
**string :: size_type **
s.size()函式返回的是size_type型別。該型別是string類及其他大多數標準庫型別都定義了幾種配套的型別。
size_type是一種無符號型別的值。不能與int等有符號數混用,會產生意想不到的結果。例s.size()注:在string比較中,比較規則。(字元相異)
string的運算子(+)的兩側至少有一側是string物件
錯誤示例: string s1 = 「hello」 + ", " + s2 (其中s2是string 物件)c語言中的標頭檔案形如name.h在c++中命名為cname
處理str中每個字元(**塊中的部分函式為string標準庫型別中的)
string s
("some string");
for(
auto c : s)
cout << c /引用迭代
for(
auto
&c : s)
c =toupper
(c);
cout << s /使用下標進行迭代
for(
decltype
(str.
size()
) index =0;
index != s.
size()
&&!isspace
(s[index]);
++index)
s[index]
=toupper
(s[index]
);
標準庫型別vector表示物件的集合,其中所有的物件型別都相同,且所有物件都有索引,用於訪問物件。同時,vector也被稱為「容器」。vector是乙個類模板。c++中有類模板也有函式模板。
除string的初始化方式外,vector多了個列表初始化。
vector v1 =
;vector v1
;//兩種方式是等價的
//錯誤示例:編譯器檢測到與元素型別不同,會執行預設初始化。
vector v1
;vector v1
;//這兩種方式會得到有10個預設初始化的元素
vector物件上的操作不做具體介紹。
迭代器有有效和無效之分。有效的迭代器或者指向某個元素,或者指向容器中尾元素的下一位
auto b = v.
beign()
,e = v.
end();
//b表示v的第乙個元素,e表示v的尾元素的下一位置
如果容器為空,則v.begin()與v.end()返回的是同乙個迭代器,都是尾後的迭代器。
此時需要用解引用改變字元。例如:
for
(auto it = v.
begin()
;it != v.
end()&&
!isspace
(*it)
;++it)
*it =
toupper
(*it)
;
迭代器型別
vector<
int> v ;
const vector<
int> cv;
auto it1 = v.
begin()
;//it1是vector:: iterator型別
auto it2 = cv.
begin()
;//it2是vector:: const_iterator型別
const_iterator型別只可以讀不可以寫。
為了得到const_iterator型別c++11新標準引入cbegin()和cend()函式。
迭代器呼叫函式時,正確的是(*it).empty( ),錯誤的是 *it.empty( )。
c++語言定義了箭頭運算子(->)。箭頭運算子把解引用和成員訪問函式兩個操作結合在一起。it->mem和 (*it).mem相同。
陣列與vector不同點是陣列的大小確定,不能隨意向陣列中增加元素。
string a[b]
;//當b為常量時正確,否則錯誤。
int*parr[42]
;//含有42個整型指標的陣列。
不允許拷貝和賦值
int a =
;int a2[
]= a;
//錯誤,不允許乙個陣列初始化另乙個陣列。
a2 =a ;
//錯誤,不允許把乙個陣列直接賦值給另乙個陣列。
int(
*p)[10]
;int
(&p2)[10
];
指標和陣列
使用陣列時,編譯器一般會把它轉化為指標。使用指標訪問陣列元素時注意解引用
string nums = ;
string *p = nums; //等價於 p = &nums[0];
陣列也具有begin()和end(),並於vector相同。
注意:函式strlen( a );其中a必須是以空字元結束。且不能用 string初始化 char*
用陣列初始化vector物件
int int_arr=
;vector<
int>
ivec
(begin
(int_arr)
,end
(int_arr)
);
多維陣列的迭代
//ia為乙個二維陣列
for(
auto
&i : row)
for(
auto col: row)
//若要進行寫操作需要寫為 &col
cout << col << endl;
使用引用符&為了避免陣列被自動轉化為指標。 第3章 字串向量和陣列
1 標頭檔案不應該包含using宣告 2 直接初始化string str or string num,char 拷貝初始化 string str str2 3 getling cin,line 讀取一行直到遇到第乙個換行符讀取並丟棄換行符 4 如果一條語句中有size 函式,就不用int避免混用 5...
C Primer 第3章 字串 向量和陣列
6 多維陣列 using namespace name 標頭檔案不應包含using宣告 使用等號 初始化乙個變數,實際上執行的是拷貝初始化,編譯器把等號右側的初始值拷貝到新建立的物件中去。如果不使用等號,則執行的是直接初始化。常用操作 getline is,s 從is中讀取一行賦給s,返回is s....
字串 向量和陣列
迭代器介紹 陣列定義和初始化string物件 string物件上的操作 處理string物件中的字元 定義和初始化 vector v1 vector v2 v1 v2中包含有v1中所有元素的副本 vector v2 v1 等價於v2 v1 vector v3 n,va1 v3包含n個重複的v1 ve...