1. 程式人生 > >C++標準庫---vector使用注意事項

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