【C++學習筆記】vector和array
一、模板類vector
vector使用new和delete來自動管理記憶體。
1、首先,使用vector要包含標頭檔案vector;
2、其次,vector包含在名稱空間std中,因此可使用using編譯指令、using宣告或std::vector;
3、第三,模板使用不同語法來指出它所儲存的資料型別;
4、第四,vector類使用不同的語法來指定元素數。
5、使用方法:
vector<double> vt(n_elem);其中n_elem可以是整型常量,也可以是整型變數。
由於vector物件在插入或新增值時自動調整長度,因此可以將初始長度設為零。
二、模板類array(C++11)
vector類的功能比陣列強大,但效率稍低。如果需要長度固定的陣列,使用陣列更佳,但代價是不方便和不安全。C++11新增模板類array,位於名稱空間std中,與陣列一樣,array物件的長度也是固定的,也是用棧(靜態記憶體分配),而不是自由儲存區,因此效率與陣列相同,但更方便與安全。
array<typename,n_elem> arr;
與vector不同,n_elem不能是變數。
在C++11中,可將列表初始化用於vector和array,但在C++98中不能。
三、例子
#include <iostream>
#include <vector>
#include <array>
int main()
{
using namespace std;
double a1[4] = {1.2, 2.4, 3.6, 4.8};
vector<double> a2(4);
a2[0] = 1.0/3.0;
a2[1] = 1.0/5.0;
a2[2] = 1.0/7.0;
a2[3] = 1.0/9.0;
array<double, 4> a3 = {3.14, 2.72, 1.62, 1.41};
array<double, 4> a4;
a4 = a3;
cout << "a1[2]: " << a1[2] << " at " << &a1[2] << endl;
cout << "a2[2]: " << a2[2] << " at " << &a2[2] << endl;
cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl;
cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl;
a1[-2] = 20.2;
cout << "a1[-2]: " << a1[-2] << " at " << &a1[-2] << endl;
cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl;
cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl;
cin.get();
return 0;
}
索引-2即*(a1-2) = 20.2;
其含義如下:
找到a1指向的地方,向前移兩個double元素,並將20.2儲存到目的地。即是將資訊儲存到陣列外面。與C語言一樣,C++也不檢查這種超界錯誤,在這個示例中,這個位置位於array物件a3中。其他編譯器可能將20.2放在a4中,這表明陣列的行為是不安全的。
使用成員函式at()或中括號表示法避免不安全的行為
a2.at(1) = 2.3;
兩者的區別在於,使用at()時,將在執行期間捕獲非法索引,而程式預設將中斷。這種額外檢查代價是執行時間更長。
下面這些類能夠降低意外超界錯誤的概率,如begin()和end()。
相關文章
- C++學習之路(vector::clear和vector::erase的區別)C++
- C++ STL學習——vectorC++
- C++ ——vector陣列筆記C++陣列筆記
- 【numpy學習筆記】 Array processing筆記
- C++筆記— 排序函式sort() 和vector容器C++筆記排序函式
- C++學習筆記C++筆記
- C++學習筆記——003C++筆記
- c++學習筆記(四)C++筆記
- c++學習筆記(五)C++筆記
- OI學習筆記(C++)筆記C++
- c++學習筆記(三)C++筆記
- C++學習筆記——C++ 繼承C++筆記繼承
- C/C++學習路線———學習筆記C++筆記
- C++ 學習筆記之——輸入和輸出C++筆記
- C++學習筆記-----類和建構函式C++筆記函式
- C/C++學習筆記:字串C++筆記字串
- C++ 學習筆記之 引用C++筆記
- 【C++學習筆記】for迴圈C++筆記
- C++/C學習筆記(七)C++筆記
- C++學習筆記——001C++筆記
- 【譯】Rust中的array、vector和sliceRust
- Accelerated C++學習筆記--組織程式和資料C++筆記
- C++學習筆記(二)——函式C++筆記函式
- Android Utils 之 Vector 學習筆記(一)—— VectorImpl 程式碼分析Android筆記
- AS 學習筆記 for in 和 for each in筆記
- c++ std::vector 切記C++
- C++學習筆記基礎篇15——地址和指標C++筆記指標
- C++ 學習筆記之——STL 庫 queueC++筆記
- C++ 學習筆記之 STL 佇列C++筆記佇列
- 【C++學習筆記】型別組合C++筆記型別
- c++學習筆記 -- 建構函式C++筆記函式
- C++學習筆記----讀寫檔案C++筆記
- 林軒田機器學習技法課程學習筆記6 — Support Vector Regression機器學習筆記
- C++【vector】用法和例子C++
- 【C++ Primer Plus】學習筆記--第10章 物件和類C++筆記物件
- C++ 一些學習筆記(十二)類和物件-多型C++筆記物件多型
- 【C++學習筆記】一個使用new和delete的例項C++筆記delete
- git 和 vim 學習筆記Git筆記