C 順序容器學習小結

2021-07-01 21:06:29 字數 3348 閱讀 4648

一、 c++陣列的描述

一維陣列的動態記憶體分配:

int *num=new int[len];

delete num;

二維陣列的動態記憶體分配:

1、知第二維

char (*num)[n];//指向陣列的指標

num = newchar[m][n];

deletenum;

2、知第一維

char*num [m];//指標的陣列

for(int i=0; inum[i] = new char[n];      

for(i=0; ideletenum [i];

deletenum;

3、已知一維 分配記憶體(保證記憶體的連續性)

char*num [m];//指標的陣列

num [0] = new char[m*n];

for(int i=1; inum [i] = num [i-1] + n;

delete a[0];

4、兩維都未知

char** num;

num = new char* [m];//分配指標陣列

for(int i=0; inum[i] = new char[n];

for(i=0; ideletenum [i];

deletenum;

5、兩維都未知,一次分配記憶體(保證記憶體的連續性)

char ** num;

num = new char* [m];

num [0] = new char[m * n];//一次性分配所有空間

for(int i=1; inum[i] = num [i-1] + n;//分配每個指標所指向的陣列

deletenum [0];

deletenum;

二、 c++容器型別

vector 可變大小陣列 隨機訪問方便

deque 雙端佇列 隨機訪問方便

list 雙向鍊錶 容器中間插入刪除很方便 如果有很多的小元素 額外開銷很嚴重

forward_list 單向鍊錶 容器中間插入刪除很方便 如果有很多的小元素 額外開銷很嚴重

array 固定大小陣列

string 用以儲存字串

容器的操作:

1、向容器中新增元素:

push_back---除了array和forward_list以外,push_back從尾部新增乙個元素;

push_front==list、forward_list、deque容器支援push_forward將元素從頭插入;

intsert—vector ,string,list,deque都支援insert成員,forward_list支援特殊的insert。

emplace—新標準引入三個成員,,emplace_front,emplace,emplace_back是構造而不是拷貝元素,

2、在順序容器中訪問元素的操作:

vectorc;

c.back();//返回c中尾部的引用,若c為空,函式行為未定義;

c.front();//返回c中頭部的引用,若c為空,函式行為未定義;

c[n];

c.at(n);//返回下標為n的引用,如果下標越界,則標出異常

注意:at操作只是適用於string vector deque array操作;back不適用與forward_list.

3、刪除操作:

vector c;

c.push_back();

c.push_front();

c.erase(p);

c.erase(b,e);

c.clear();

注意:刪除元素的成員函式不檢查其引數,在刪除之前,必須保證它們存在。

4、(單向鍊錶)forward_list的特殊使用

forward_listfist;

fist.before_begin()

fist.cbefore_begin();

fist.insert_after();

emplace_after();

fist.erase_after();

5、改變容器大小

c.resize(n);

c.resize(n,t);

6、管理容量的成員函式

vectorc;

c.shrink_yo_fit);只適用於vector string deque,將capacity()減少為size()的大小。

c.capacity();不重新分配記憶體的情況下 可以存貯多少元素

c.reserve(n);分配至少能容納n的記憶體空間。

7、容器介面卡

size_type – 一種型別,足以儲存當前型別的最大值

value_type—元素型別

container_type—實現適配的底層型別

示例**如下:

#include#include#includeusing namespace std;

int main());

vectorstr1("a","b","bcx");

//拷貝

forward_listwords(str1.begin(),str1.end());

dequenu(str.begin(),it);

//使用assign賦值(僅適用於順序容器)

str.assign(str1.cbegin(),str1.cend());

//使用swap交換兩個相同的容器

vectora1(10);

vectora2(24);

swap(a1,a2);

//從尾部加入元素

string word;

vectorcontains;

while(cin>>word)

//從頭部插入元素

listli1;

while(cin>>word)

//從容器的特定位置插入

vectorv2;

listli2;

li2.insert(li2.begin(),"hello");

li2.insert(v2.begin(),"hello");//vector雖然不支援從頭部插入但是可以用這種方式插入,但是這樣速度會很慢

//forward_list的使用

forward_listfist=;

auto one=fist.before();//目前元素

auto two=fist.begin();

while(curr!=fist.end())*/

//管理容量成員函式

vectornum;

cout<<"size()="<::size_type i=0;i!=40;i++)

cout<<"size()新1="<

(全文完)

C 順序容器小結

c primer 中文第四版中,第九章 容器和演算法 標準庫定義了順序容器和關聯容器。順序容器 sequential container 將單一型別元素聚集起來成為容器,然後根據位置來儲存和訪問這些元素。順序容器的元素排列次序與元素值無關,而是由元素新增到容器裡的次序決定。標準庫定義了三種順序容器型...

c 順序容器的學習

1.順序容器分為3類 vector,list,deque 2.容器內元素的型別約束 在c 中,大多數的資料型別都可以做為容器的元素,甚至容器。容器的元素型別必須符合兩個條件 1.元素型別支援賦值運算,2,元素型別的物件必須可以複製。要注意的是引用型別無法成為容器的元素。這是因為如果引用型別成為元素後...

關於c 順序容器小結(二) 基本操作

各個容器都包含在自己的標頭檔案中 構造 v v1 v v2 v1 v v1 操作 所有容器的基本操作 v1.size 返回容器大小 swap v1,v2 交換容器元素 僅當元素型別一致是才可交換 v1.swap v2 交換v1,v2的元素 v1.max size 返回容器可儲存的最大元素數目 v1....