Cpp STL vector常用語法

2021-10-09 13:17:28 字數 3604 閱讀 4240

《cpp stl - vector常用語法》

stl,英文全稱 standard template library,中文可譯為標準模板庫或者泛型庫,其包含有大量的模板類和模板函式,是 c++ 提供的乙個基礎模板的集合,用於完成諸如輸入/輸出、數學計算等功能。很多人對c++望而卻步是因為很多記憶體問題及執行緒安全問題無法掌控,導致不友好,而stl已經能夠很好的規避這些問題了,比如使用vector的記憶體管理就不需要你擔心了,但是vector的動態記憶體有時候會很慢,因為vector每次會根據你的需求的2倍來申請記憶體的,所以當你的陣列特別大的時候可能會申請很多次記憶體,導致效率低,當然,vector也有reserve或者resize這樣的方法,有malloc是類似的功能,如果使用malloc記得free也沒什麼問題。

key words:vector各種操作的複雜度、vector常用屬性和方法、vector排序、lambda表示式

beijing, 2020

code:

agile pioneer  

參考**:cpp reference vector

操作複雜度(最差)

容量 capacity

迭代元素訪問 element access

修改 modifiers

vector 的常用方法

count方法

求最值vector 的排序

// 初始化 n 個 0

vector<

int>

a(n,0)

;

// 初始化 m 行 n 列 個 0

vector<

int>

a(m, vector<

int>

(n,0))

;

訪問push_back()

push_front()

insert()

pop_back()

pop_front()

erase()

find()

vector

o(1)

o(1)

\o(n)

o(1)

\o(n)

vector 的容量是根據當前元素進行動態擴容的,在堆中分配記憶體,元素連續存放,有保留記憶體,如果減少大小後,記憶體也不會釋放;如果新值大於當前大小時才會重新分配記憶體,在新增資料的時候,就要分配一塊更大的記憶體,將原來的資料複製過來,釋放之前的記憶體,再插入新增的元素,不同的編譯器實現的擴容方式不一樣,vs2015中以1.5倍擴容,gcc以2倍擴容。

所以如果 vector 需要儲存的 size 比較大的情況,應該提前使用 reserve 指定其 size,否則非常耗時。

初始時刻 vector 的 capacity 為0,塞入第乙個元素後 capacity 增加為1。

reverse(vec.begin(), vec.end());

vector::iterator ite1 = find(vec_dis.begin(), vec_dis.end(), 6);

vector::iterator ite2 = find(vec_dis.begin(), vec_dis.end(), 7);

vector::iterator ite3 = find(vec_dis.begin(), vec_dis.end(), 8);

auto index1 = ite1 - vec_dis.begin();

// or

auto index1 = std::distance(std::begin(vec_dis), ite1);

auto index2 = std::distance(std::begin(vec_dis), ite2);

auto index3 = std::distance(std::begin(vec_dis), ite3);

// 單獨執行remove不會刪除x元素,會返回乙個迭代器

remove(vec.begin(), vec.end(), x)

// 刪除元素的完整寫法

vec.erase(remove(vec.begin(),vec.end(), x),vec.end());

a.insert(a.end(), b.begin(), b.end());
通過insert的push_front方法
// 向陣列 a 的頭部插入數值 6

a.insert(a.begin(), 6);

通過insert 實現 extend方法
// eq:a.extend(b)

// 1

// reserve() is optional - just to improve performance

a.reserve(a.size() + distance(b.begin(), b.end()));

a.insert(a.end(), b.begin(), b.end());

// 2

copy(b.begin(), b.end(), back_inserter(a));

// 3

a.reserve(a.size() + b.size());

a.insert(a.end(), b.begin(), b.end());

a.insert(std::end(a), std::begin(b), std::end(b));

string temp = "aaabcdaaa!!!";

int num = count(temp.begin(),temp.end(),'a');

cout <<"在字串" << temp << "中," <<"字母a出現的次數是" << num << endl;

int num=;

cout<<"最小值是 "<<*min_element(num, num+6)cout<<"最小值是 "<<*min_element(nums.begin(), nums.end())auto lambda = (int a, int b);

// 值傳遞

auto lambda = [=];

// 引用傳遞

auto lambda = [&];

// 降序排序

auto lambda = (int a, int b)->bool;

sort(nums.begin(), nums.end(), lambda);

sort(a.begin(), a.end(), (vectora1, vectora2)->bool);
auto lambda = [&nums](int a, int b)->bool ;

sort(idx.begin(), idx.end(), lambda);

cpp stl是什麼,有什麼用?

各種操作的複雜度分析

vector擴容原理說明

lambda表示式詳解

常見的stl容器複雜度分析

php mysql 常用語句 mysql常用語句

一 修改mysql使用者密碼 mysql h localhost u root p 命令列登入 update user set password password 123456 where user root 二 資料庫操作 show databases 顯示資料庫 create database ...

mysql常用語法 MySQL常用語法

更新資料 update 表名 set 健名 更改的值 where 建 刪除資料 delete from 表名 where 索引 create index 索引名稱 on 表名 鍵名 建立試圖 create view 檢視名 鍵,鍵 as select matchno,abs won lost fro...

mysql常用語句 MySQL常用語句

create table student id int primary key auto increment comment 學號 name varchar 200 comment 姓名 age int comment 年齡 comment 學生資訊 修改表注釋 alter table studen...