C++標準庫---vector使用注意事項
使用vector需要注意的地方
1.vector支援隨機存取,因此你只要知道元素的位置,可以在常數時間記憶體取任何一個元素;
2.在末端附加或刪除元素,vector的效能相當好,但是在前端或中部安插或刪除元素,效能就不行了,因為操作點之後的每一個元素都必須向後移動,而每一次移動都得呼叫assignment(賦值)操作符;
3.合適的vector大小(size)很重要,因為capacity()返回的實際容納的元素數量過小,vector就必須重新配置記憶體儲存器,
(1)一旦記憶體重新配置,和vector元素相關的所有references,pointers,iterators都會失效;
(2)記憶體重新配置很耗時間;
4.發生以下情況vector迭代器失效:
(1)使用者在一個較小索引位置上安插或移除元素
(2)由於容量變化而引起重新分配
具體講:
安插和移除元素,都會使“作用點”之後的各元素的references,pointers,iterators失效,如果安插操作甚至引發記憶體重新分配,那麼該容器身上的所有元素references,pointers,iterators都會失效;
5.vector只支援最低限度的邏輯錯誤檢查。下標操作符的安全版本at(),是唯一被標準規格書要求可能丟擲異常的一個函式,其他函式都不做檢查,如果發生越界存取,會引發未定義的行為;
程式碼示例:
#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; int main() { vector<string> sentence; sentence.reserve(5); sentence.push_back("Hello,"); sentence.push_back("how"); sentence.push_back("are"); sentence.push_back("you"); sentence.push_back("?"); copy(sentence.begin(),sentence.end(),ostream_iterator<string>(cout," ")); cout<<endl; cout<<"max_size():"<<sentence.max_size()<<endl; cout<<"size():"<<sentence.size()<<endl; cout<<"capacity():"<<sentence.capacity()<<endl; swap(sentence[1],sentence[3]); sentence.insert(find(sentence.begin(),sentence.end(),"?"),"always"); cout<<sentence.at(5)<<endl; sentence.back()="!"; cout<<sentence.at(5)<<endl; copy(sentence.begin(),sentence.end(),ostream_iterator<string>(cout," ")); cout<<endl; cout<<"max_size():"<<sentence.max_size()<<endl; cout<<"size():"<<sentence.size()<<endl; cout<<"capacity():"<<sentence.capacity()<<endl; system("pause"); return 0; }
執行結果:
相關推薦
C++標準庫---vector使用注意事項
使用vector需要注意的地方 1.vector支援隨機存取,因此你只要知道元素的位置,可以在常數時間記憶體取任何一個元素; 2.在末端附加或刪除元素,vector的效能相當好,但是在前端或中部安插或刪除元素,效能就不行了,因為操作點之後的每一個元素都必須向後移動,而每一次
C++標準庫vector類型的使用和操作總結
種類 style 開始 spa log string string類 gpo targe vector是一種類型對象的集合,它是一種順序容器,容器中的所有對象必須都是同一種類型。vector的對象是可以動態生長的,這說明它在初始化時可以不用指定大小,而是再使用時根據元素
c/c++ 標準庫 vector
font 編譯不過 class for 標準庫 size_type end auto 試用 c/c++ 標準庫 vector 標準庫 vector的小例子 test1~test7 #include <iostream> #include <vector&g
C++標準庫vector及迭代器【轉】
(轉自:https://blog.csdn.net/zhy_cheng/article/details/8041940?utm_source=blogxgwz46) vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。
C++ 標準庫 vector型別
C++ 標準庫 vector 型別 1,vector物件的定義和初始化 vector是一個類似於動態陣列的型別,對於vector的初始化,如下: vector<int> v1;//儲存in
C++標準庫vector及迭代器
vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。引入標頭檔案 #include<vector> 1.vector物件的定義和初始化 vector<T> v1
C++標準庫vector使用(更新中...)
內存 template class clas cto NPU size_type 移動 oca 內容: vector() //構造函數 1.vector構造函數 default (1) explicit vector (const all
C++標準庫 std::sort vector排序
前天要做一個對C++ STL的vector容器做一個排序操作,之前一直把vector當做一個容量可自動變化的陣列,是的,陣列,所以打算按照對陣列進行排序的方法:用快速排序或是氣泡排序等演算法自己寫一個排序的函式。後來覺得STL這麼強大,應該有它自己的排序方法(沒有好好學習
【C++】順序容器 Vector 注意事項
引用標頭檔案 #include <vector> 一、操作資料 主要有下列幾種方式: vector<int> vecSalary; //1.直接新增 vecSalary.push_back(2000); vecSa
C++學習筆記(三)(標準庫vector型別和bitset型別)
1. vector物件的定義和初始化 標頭檔案 < vector> 幾種初始化vector物件的方式: vector<T> v1; //vector儲存型別為T的物件,預設建構函式v1為空 vector<T> v
C++ Primer 第三章 標準庫vector型別
vector是同一種類型的物件的集合,每個物件都有一個對應的整數索引值。 使用vector之前,必須包含相應的標頭檔案。 #include<vector> using std::vector; vector不是一種資料型別,而只是一個類模板,可用來定義任意多種資
C++ 標準庫類型vector
nbsp () under iter ++ 叠代器類型 指針 vector 頭文件 vector 為類模板,包含在頭文件vector中。 定義和初始化 vector(T) a; //元素為T類型,默認初始化 vector(T) b = a; //用
C標準庫pow函數精度問題。
一般來說 nbsp any pre 4.5 logs urn padding signed #include <stdio.h> int main () { int temp,i; double a=2.4568; unsigned char b[5]
C標準庫stdlib.h概況
庫函數 字符常量 函數返回 表示 size_t 字節 max size 字符集 庫變量 size_t 這是無符號整數類型,它是 sizeof 關鍵字的結果 wchar_t 這是一個寬字符常量大小的整數類型。 div_t 這是 div 函數返回的結構 ldiv_t 這
C++標準庫算法
fill acc bsp c++ count nbsp size count() style 一、只讀算法 1. find() 2. count() 3. accumulate 4. equal 二、寫入算法 1. fill 2. fill_nC++標準庫算法
C++標準庫
補充 ref idt 例如 cat bool 操縱程序 nta 取余 C++標準庫 C++標準庫和標準模版庫在線資料查詢網址: http://en.cppreference.com/w/ 或者 http://www.cplusplus.com/ C+
C# 調用C++動態庫註意事項
stringbu size font 返回 ++ 註意 build -a 返回值 C# 調用C++動態庫註意事項 最近項目上需要在C#中調用C++,期間遇到不少坑,總結如下: 1.in const char* 對應C#中string 或 IntPtr 2.
C 標準庫 - string.h之strncpy使用
填充 reat 函數 clas != count imu serve uno strncpy 把 src 所指向的字符串復制到 dest,最多復制 n 個字符。當 src 的長度小於 n 時,dest 的剩余部分將用空字節填充。 char *strncpy(char
C 標準庫 - string.h之strcat使用
www. href 產生 rmi put for turned med main strcat Appends a copy of the source string to the destination string. The terminating null cha
C 標準庫 - string.h之strlen使用
rac ati oob [] mine eat including 定義 mina strlen Returns the length of the C string str. The length of a C string is determined by the