C 基礎容器

2021-10-03 07:10:54 字數 4378 閱讀 1736

概念:代表記憶體裡一組連續的同型別儲存區可以用來把多個儲存區合併成乙個整體

//陣列宣告

//一維陣列

int a[10]

=;//二維陣列

int b[2]

[3]=,};

int a[10]是宣告;int是陣列裡元素的型別;10是陣列最多可容納的元素的個數

由於上面定義的陣列,無法實現動態擴容插入元素,因為容量有限.在c++中有許多的標準庫.而vector屬於c++中stl標準庫中的一種封裝好的容器.

#include

#include

using namespace std;

intmain()

; cout <<

"size is:"

<< vec.

size()

<< endl;

cout <<

"capacity is:"

<< vec.

capacity()

<< endl;

//插入形式

vec.

push_back(5

);// vec.insert(vec.end(),5);

cout <<

"push_back after size is:"

<< vec.

size()

<< endl;

cout <<

"push_back after capacity is:"

<< vec.

capacity()

<< endl;

//刪除操作

vec.size()標誌著當前實際陣列儲存了多少個元素,vec.capacity表示這當前陣列可以最多儲存多少元素.

而這個vec.capacity具體如何變化 是根據vector裡面自動擴容的機制,而擴充套件的大小 是根據這個函式進行的.

size_type _calculate_growth

(const size_type _newsize)

const

const size_type _geometric = _oldcapacity + _oldcapacity /2;

if(_geometric < _newsize)

return

(_geometric)

;// geometric growth is sufficient

}

char strhelloworld=

;char strhelloworld2[10]

=;// 在宣告字元變數時,應該為這個空結束符預留乙個額外元素的空間

char strhelloworld1[11]

=;//指標表示方法

char

*pstrhelloworld =

"helloworld"

;

字串變數:字串是以空字元(』\0』)結束的字元陣列

空字元』\0』自動新增到字串的內部表示中

字串常量

字串常量是一對雙引號括起來的字串行

字串中每個字元作為乙個陣列元素儲存

不允許更改

例如字串"helloworld"

char與char*的區別

由於此時pstrhelloworld指向是常量值,故不可修改,會發生錯誤.但是strhelloworld1可以進行修改.如果當pstrhelloworld指向strhelloworld1 則可以進行修改.

char strhelloworld[max_value]=;

char strhelloworld1=

;char strhelloworld2=

;//strlen()返回字元長度

cout <<

"strlen(strhelloworld):"

<<

strlen

(strhelloworld1)

<< endl;

//返回比較值,strcmp(a,b),比較的是ascii碼,後到長度.a>b則返回1,a=b則返回0,acout <<

"strcmp(strhelloworld,strhelloworld2): "

<<

strcmp

(strhelloworld1,strhelloworld2)

<< endl;

//strcpy(a,b),將b複製到a

cout <<

"strcpy(strhelloworld, strhelloworld1): "

<<

strcpy

(strhelloworld, strhelloworld1)

<< endl;

//strncpy(a,b,n),將b的前n位複製到a.

cout <<

"strncpy(strhelloworld, strhelloworld1,3): "

<<

strncpy

(strhelloworld, strhelloworld2,3)

<< endl;

//strcar(a,b),將b拼接到a後面

cout <<

"strcat(strhelloworld, strhelloworld1): "

<<

strcat

(strhelloworld, strhelloworld1)

<< endl;

//strstr(a,b),查詢b在a的位置,返回該位置以後的值

cout <<

"strstr(strhelloworld, \"ld\"): "

<<

strstr

(strhelloworld,

"ld"

)<< endl;

//strchr(a,『b』),查詢字元『b』在a的位置,返回該位置以後的值

這裡需注意.由於strcpy()api函式有可能在某些ide上會報錯,最好這樣設定ide.

專案 -> 屬性 -> c/c++ ->預處理器定義 ->編輯.中新增_crt_secure_no_warnings

由於在strcpy()等方法中有可能會將一些其他位址上的值進行覆蓋,從而導致出錯.故現在都是使用strcpy_s()api函式進行更加安全操作.

//空字串

string s;

//定義並初始化

string s =

"helloworld"

;string s

("helloworld");

string s1=

string

("helloworld");

//當前的字元的長度為多大

cout<

length()

<

//當前的字元的長度為多大

cout<

size()

<

// 最大可以儲存多少字元

cout<

capacity()

<

//轉換為c風格的字串

C 基礎 順序容器

順序容器 vector,list,deque,總結一些基本重要的操作。標頭檔案 include include 空容器定義 vectorsvec 容器初始化操作 1.容器複製,要求容器型別相同,元素型別相同 vectorivec1 10,1 vectorivec2 ivec1 2.初始化一段元素,元...

c 標準容器基礎《vector》

vector實際上是array的加強版,vector具有許多實用的內建函式,總體比array方便許多,與普通陣列相比最大的特點在於其動態地開闢儲存空間,而非像陣列一樣使用前先提前開闢固定大小的記憶體空間,對於需要從鍵盤輸入開闢大小的數值時極為方便。vector與array的簡單對比 include ...

C 基礎 容器和演算法

1 map和set有什麼區別,怎麼是寫的 都是關聯容器,底層實現都是紅黑樹 區別在於 2 介紹一下stl的allocator stl的分配器用於封裝stl容器在記憶體管理上的底層細節在c 中,其記憶體配置和釋放如下 new運算分兩個階段 1 呼叫 operator new配置記憶體 2 呼叫物件建構...