一、 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....