順序容器為程式設計師提供控制元素儲存和訪問順序的能力,這種順序不依賴於元素的值,而是與元素加入容器時的位置對應。
順序容器型別
vector
可變大小的陣列,連續的空間,支援快速隨機訪問,但是向中間插入資料非常耗時。
deque
雙向佇列,從兩端新增刪除代價低,從中間代價高。
list
雙向鍊錶
forward_list
單向鍊錶
array
固定大小的陣列,與內建陣列相比更加安全容易使用。
string
與vector相似,專門用於存放字元。
在順序容器的選擇上,考慮向容器新增刪除的代價以及非順序訪問容器元素的代價,通常vector較為常用。
注:c++程式應該使用標準庫容器,而不是更加原始的資料結構。
vector和陣列非常相似,vector是可變大小的陣列。vector的動態擴充套件並不是在原空間之後續接新空間,而是找更大的記憶體空間,然後將原資料拷貝新空間,釋放原空間。
vector是模板而非型別,由vector生成的型別必須包含vector中元素的型別,如vector。
vectorv1; //v1是乙個空的vector,其中資料型別是t型別,執行預設初始化 ——1
vectorv2(v1); //拷貝構造 ——2
vectorv2 = v1; //等價於v2(v1) ——3
vectorv3(n,val); //v3包含n個值為val的數 ——4
vectorv4(v1.begin(),v1.end()); //拷貝 --5
vectorv5 //直接賦值 --6
vectorv5= //相當於6
vectorv1;
v1.assign(begin,end);//將[begin, end)區間中的資料拷貝賦值給本身。 --7
v1.assign(n,elem);//將n個elem拷貝賦值給本身。 --8
push_back(e);向尾部插入e元素 ——9
pop_back();刪除尾部函式 ——10
insert(iterator pos, e);向迭代器位置插入資料e
insert((iterator pos,n, e);向迭代器位置插入n個e ——11
erase(iterator pos);刪除迭代器指向元素
erase(iterator start,end);刪除從start到end之間的元素——12
clear();清空所有元素
v.empty()
判斷是否為空,空為真否則為假
v.size()
返回v中元素個數 ——13
v[i]
按照索引訪問資料 ——14
v.at(i)
等同於v[i]
v.front()
第乙個元素
v.back()
最後乙個元素
v1.swap(v2)
將v2與本身的元素互換
v1.reserve(int len)
容器預留len個元素長度,預留位置不初始化,元素不可訪問。
v1 == v2
v1和v2相當當且僅當元素數量和每個元素都相同時返回真
v1!=v2
顧名思義
注:不能使用下標形式新增元素。
#include#include#includeusing namespace std;
void print(int a)
class print
};void printv(vector& v)
int main() --7
vectorv2(v1); //拷貝構造v2= ——2
vectorv3 = v2; // v3= --3
vectorv4(v1.begin(), v1.end()); //v4= ——5
vectorv5(10, 10); //v5= --4
v1.assign(v5.begin(), v5.end()); //重新賦值 v1= --8
vectorv6;
v6.push_back("cpp"); //v6= --9
v6.pop_back(); //"cpp"彈出 ——10
v4.insert(--v4.end(),3,14); //在v4末尾前乙個位置插入三個14,v4=——11
v4.erase(v4.begin(), --v4.end()); //刪除v4頭到尾前乙個位置 v4= ——12
v4[0] = 5; //v4= ——14
vector>a = , }; //a=, } ——6
for_each(a.begin(), a.end(), print());
cout << endl;
cout << a.size() << endl; //2 ——13
return 0;
}
標準庫型別string 表示可變長字串行
string s1; 預設初始化
string s2(s1); 拷貝構造
string s2 =s1;同上
string s3(「value」)
string s3 = 「value」 同上
string s4(n,『c』) n個c組成的串
str str1=str2;
str1 =「hello」;
str1.assign(「hello」);
str1.assign(「hello」,int n) 將字串的前幾個賦值給str1
str1.assign(int n,『x』); 將n個x賦值給str1
os《輸出
is>>s
輸入s.empty()
是否為空
s.size()
字串字元的個數
s[n]
按索引訪問
s1+s2
字串拼接
將字串s前n個字元拼接到s1結尾
s1==s2
顧名思義
s1!=s2
同上
C語言個人學習筆記
在匯程式設計序中,乙個函式的開頭常常見到以下 8048cbd 83 ec 18 sub 0x18,esp這句話的目的是分配棧幀。棧幀中存放的是程式中的區域性變數。在windows的編譯器cl.exe中這些棧幀中的值最初會被初始化為0xcc,這也是為什麼vc 在陣列越界或訪問未賦值的記憶體時列印 燙燙...
java基礎 個人學習筆記 C
12.class valuetest1 intnum 10 for strings student system.out.println 方法呼叫前 t student 0 范冰冰 changevalue student system.out.println 方法呼叫後 t student 0 周杰...
c 個人學習筆記 類繼承
面對物件過程程式設計的主要目的之一是提供可重用的 塊。當專案十分龐大時,對已通過測試的 進行重用比重新編寫 更能提供效率,節省時間。c 通過擴充套件和修改類來提高 的重用性,這種方法叫類繼承。從已有的類 基類 派生出新的類 派生類 派生類繼承了基類的所有特性 成員變數 方法等 並且還可以在此基礎上新...