string 和 vector是兩種標準庫型別,前者支援可變長字串,後者支援可變長的集合。內建陣列是更基礎的型別,string和vector是對它的某種抽象。
呼叫string庫:
#include
using std::string
string定義的5種形式:
#include
#include
using
namespace std;
intmain()
結果:
hello
hello
aaaaa
aaaaa
hello world!
string操作操作
含義getline(is,s)
從is中讀取一行賦給s
s.empty()
s為空返回true,否則返回false
s.size()
s字元個數
s[n]
索引為n的字元
s1+ s2
s1和s2連線後的結果
s1 == s2
判斷是否相等
s1 != s2
判斷是否不相等
<,<=,>,>=
字典序的比較
讀寫 string 物件:
讀取時,string自動忽略開頭的空白(空格符,換行符,製表符等),從真正的字元開始到遇到下一次的空白為止。
#include
#include
using
namespace std;
intmain()
結果:
hello world
hello
讀取未知數量的 string 物件
輸入流一直在讀取。
#include
#include
using
namespace std;
intmain()
}
結果:
hello world we are champion// 輸入
hello
world
weare
champion
使用getline 讀取一整行
這樣可以讀取到空格符了。
#include
#include
using
namespace std;
intmain()
return0;
}
endl
結束當前行並重新整理顯示緩衝區。
結果:
we are champion//輸入
we are champion
are you ok//輸出
are you ok
vector表示物件的集合,vector也稱為容器。可以認為是動態陣列,如果儲存的資料比記憶體大時,會重新分配記憶體(原記憶體的1.5倍),並複製原來的資料到新記憶體,原記憶體釋放,實現動態增加。這和python的list
比較相似。
#include
using std::vector;
vector 5種初始化方法:
#include
#include
using
namespace std;
void
print_vector
(vector<
auto
> vec)
cout << endl;
}int
main()
; vector<
int> v2_copy = v2;
vector<
int> v3=
;print_vector
(v1)
;print_vector
(v1_copy)
;print_vector
(v2)
;print_vector
(v2_copy)
;print_vector
(v3)
;}
結果:
10
1010
1010
1010
1010101
2345
1234
5123
45
如果單純宣告定義vectorvec
,則是預設初始化,vec
不包含任何元素。
編譯不過的話,需要把編譯器的編譯標準設定為iso c++11
.dev c++ 的在工具-編譯器選項-**生成-語言標準。
如果遍歷的過程,希望對vector
的值進行改變:
for
(auto
&v : vec)
vector的操作操作
含義push_back()
新增元素
v.empty()
判斷是否含有元素
v.size()
含有元素的個數
v[n]
取索引n上的值
v1 = v2
用v2中的元素替換 v1的元素(容器型別相同)
v1 == v2
判斷是否相等
v1 != v2
判斷是否不相等
<,<=,>,>=
字典順序進行比較
vector 的訪問:
#include
#include
using
namespace std;
void
print_vector
(vector<
auto
> vec)
cout << endl;
}int
main()
;for
(auto
&i : v)
print_vector
(v);
}
陣列的大小確定不變。
陣列的初始化:
#include
using
namespace std;
intmain()
; string s[5]
=;for(
auto i:a)
}
結果:
012
00
指標與陣列:
#include
using
namespace std;
intmain()
;int
*ip = arr;
// 等價於int *p = &arr[0]
int*ip2 = ip+2;
//ip2指向arr[2]
cout <<
*ip << endl;
cout <<
*ip2 << endl;
}
結果:
0
2
多維陣列:
#include
using
namespace std;
intmain()
,,};
for(
auto
&row : arr)
}}
結果:
012
345
參考:
vector記憶體增長方式;
C 字串 向量和陣列
vector物件 以及string物件 的下標運算子可用於訪問已存在的元素,而不能用於新增元素。只能對確知已存在的元素執行下標操作。所有標準庫容器都可以使用迭代器,string物件不屬於容器型別,但是支援很多與容器型別類似的操作。const vectorcv auto it cv.begin it ...
C 字串 向量和陣列筆記
標頭檔案中一般來說不應包含using宣告 string size 返回無符號整數,型別是size type s.size n為負值int型,會把n自動轉換成無符號型別,n n mod 256 c風格的字串 c風格的字串存放在字元陣列中並以空字元結束 null terminated,0 char ca...
C 筆記 字串 向量和陣列
using宣告可以使程式無須專門的字首使用名字。using namespace name using std cin std cout 用到的每個名字都必須有自己的宣告語句,而且每句話都得以分號結束標頭檔案不應包含using宣告。定義和初始化string物件c string s1 預設初始畫,s1是...