1. 程式人生 > >c++,vector的[]和at區別

c++,vector的[]和at區別

    std::vector<int> a;
    std::cout<<a.size();

上面輸出是0.容器初始化什麼都不做,大小為0;

    std::vector<int> a;
//    std::cout<<a.size();
    a[0]=1;
    a.at(0)=1;

下標[]賦值會顯示SIGSEGV段錯誤,越界錯誤.
at賦值會顯示 terminate called after throwing an instance of ‘std::out_of_range’

c++標準不要求vector::operator[]進行下標越界檢查,原因是為了效率,總是強制下標越界檢查會增加程式的效能開銷。

所以通常使用vector兩種方法:
(1)知道vector的大小,初始化時就設立大小.也就是知道下標操作肯定是沒有越界的.
(2)用push_back比較安全.

相關推薦

c++,vector的[]at區別

std::vector<int> a; std::cout<<a.size(); 上面輸出是0.容器初始化什麼都不做,大小為0; std::vec

C++ vectorlist的區別

1.vector資料結構 vector和陣列類似,擁有一段連續的記憶體空間,並且起始地址不變。 因此能高效的進行隨機存取,時間複雜

C# showshowdialog區別

更多 comm isp 應該 常見 解釋 方式 不存在 close 簡單地說他們的區別就是show彈出來的窗體和父窗體(上一個窗體的簡稱)是屬於同一等級的,這兩個窗體可以同時存在而且可以隨意切換,但是showdialog彈出來的窗體就不能這樣,他永遠是被置頂的,如果

C++ new malloc 區別

clas 區別 let void 操作符 類型 new 需要 調用 1.分配地方不同,malloc是堆上面,new是自由存儲區域 2.malloc/delete是函數,new/delete是操作符,可以重載 3.malloc 要指定大小,返回的是void*指針,開辟的是空空

C++ vectoriterator簡單用法

vector是動態可變陣列,可以新增int、double、自定義的類 1.int示例: #incldue<vector> vector<int> a; a.push_back(1); a.push_back(2); a.push_ba

VectorArrayList區別以及Vector並非是絕對執行緒安全的

首先看這兩類都實現List介面,而List介面一共有三個實現類,分別是ArrayList、Vector和LinkedList。List用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下:ArrayList是最常用的List實現類,內部是通過

c++中->.的區別

->用在指標型別的類例項的,而.用在例項化物件的指向。 下面是例子 #include <iostream> using namespace std; class Complex { private: double real; double image;

vectorarraylist區別

有三點需要注意: 第一: 當Vector元素超過他的初始大小時,Vector會將它的容積翻倍,而Arraylist只會增加百分之五十左右,這樣arraylist就有利於節約空間。 第二:這兩個類都是實現了list介面,都屬於有序集合,有序集合,顧名思義嗎,就是儲存在這兩個集合中的元

C# new orverride 區別

主要還是參考微軟的說明,原文:http://msdn.microsoft.com/zh-cn/library/ms173153.aspx 以下是我的理解: 一、BaseClass(父類、基類): orverrideBaseClass 中的方法必須宣告為 virtual,

ArrayList,VectorLinkedList區別詳解

一、ArrayList ArrayList是一個可以處理變長陣列的型別,這裡不侷限於“數”組,ArrayList是一個泛型類,可以存放任意型別的物件。顧名思義,ArrayList是一個數組列表,因此其內部是使用一個數組來存放物件的,因為Object是一切型別的父類,因而ArrayList內部是有一個Obje

C++/C中!~的區別與作用

區別: !是邏輯運算子(與||,&&是一類符號),表示邏輯取反,可以把非0值變成0,把0值變為1 ~是位運算子(與|,&是一類符號),表示按位取反,在數值的二進位制表示上,將0變為1,將1變為0 例子: #include<io

C++ vectormap的巢狀使用

在實習公司的專案裡,需要儲存每個使用者及其所有的操作指令,我想到的是用multimap,或者是map和vector巢狀的資料結構來儲存這些資料。一開始是想用multimap的,因為巢狀的給人感覺比較複雜,使用後發現multimap在遍歷輸出的時候,如果想以使用者

c# InvokeBeginInvoke 區別

Control.Invoke 方法 (Delegate) :在擁有此控制元件的基礎視窗控制代碼的執行緒上執行指定的委託。 Control.BeginInvoke 方法 (Delegate) :在建立控制元件的基礎控制代碼所線上程上非同步執行指定委託。 (一)Control的

C++ vector push_back 詳解

C++程式語言中有一種叫做Vector的應用方法。 (1)vector< 型別 > 識別符號 ; (2)vector< 型別 > 識別符號(最大容量); (3)vector< 型別 > 識別符號(最大容量,初始所有值); (4

C# newoverride區別

override 1. override是派生類用來重寫基類中方法的; 2. override不能重寫非虛方法和靜態方法; 3. override只能重寫用virtual、abstract、override修飾的方法; 4. 不能使用修飾符 new、static、vi

C/C++ scanfgets 區別

否則 logs ++ main 區別 %d 添加 stdin 接受 ref https://www.cnblogs.com/hlongch/p/5742477.html scanf和gets都能從輸入流stdin讀取字符串,那麽它們有什麽區別呢? scanf 留回車:開

C-sizeofstrlen區別,以及sizeof如何計算結構體大小

struct alt inf 編譯 style img com 大小 運行 sizeof和strlen區別 sizeof是關鍵字,在編譯時就能計算出值,可以計算任何類型 strlen是函數,只有在運行時才能去計算,且只能計算字符型的. 對於數組時,strlen

C++ vector、listdeque的區別 (整理)

style stl 內存大小 splice cnblogs 類定義 所有 編寫 重復 1.vector數據結構  vector和數組類似,擁有一段連續的內存空間,並且起始地址不變。因此能高效的進行隨機存取,時間復雜度為o(1);但因為內存空間是連續的,所以在進行插入和刪除操

C++三種容器:list、vectordeque的區別 2018/10/7

在寫C++程式的時候會發現STL是一個不錯的東西,減少了程式碼量,使程式碼的複用率大大提高,減輕了程式猿的負擔。還有一個就是容器,你會發現要是自己寫一個連結串列、佇列,或者是陣列的時候,既要花時間還要操心怎麼去維護,裡面的指標啊,記憶體夠不夠用啊,長度問題,有沒有可能溢位啊等

C++面試題:listvector有什麼區別

C++面試題:list和vector有什麼區別? 考點:理解list和vector的區別 出現頻率:★★★★ 解析: vector和陣列類似,它擁有一段連續的記憶體空間,並且起始地址不變,因此它能非常好的支援隨機存取(使用[]操作符訪問其中元素),但由於它的記憶體空間是連續的,所