C 個人學習筆記 順序容器(一)

2021-10-17 11:10:03 字數 3664 閱讀 5986

順序容器為程式設計師提供控制元素儲存和訪問順序的能力,這種順序不依賴於元素的值,而是與元素加入容器時的位置對應。

順序容器型別

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 通過擴充套件和修改類來提高 的重用性,這種方法叫類繼承。從已有的類 基類 派生出新的類 派生類 派生類繼承了基類的所有特性 成員變數 方法等 並且還可以在此基礎上新...