C++のarray
- 2019 年 12 月 27 日
- 筆記
題圖:NoCopy
字數:1187 | 1分鐘讀完我2小時的思考
C++の容器array
昨天的C++の容器vector我們聊了C++中的vector,也是我們目前為止遇到的第二個容器,之前還遇到過string,只是我們沒有說明它的容器屬性,後面講到容器時,一併補充。今天我們繼續聊另外一個序列化容器 —— array。
其實,array跟我們上篇提到的vector很類似,但是在定義的方式上有一些不同。
注意,此處的array並不是數組,C++中也有數組,而且跟C中的數組基本沒什麼區別,所以這系列的文章就忽略掉了。
那麼,我們先來看一下怎麼樣使用array。
使用array,首先需要在程式碼中包含頭文件:
#include <array>
由於array是標準庫裡面的類,所以需要指明命名空間:
using std:array;
或直接在array前指明命名空間:
std::array..
下面我們在看一下怎麼定義array對象。直接上示例程式碼吧,
#include<array> using std::array; int main(){ std::array<int, 3> a1{ {1, 2, 3} }; std::array<int, 3> a2 = {1, 2, 3}; std::array<std::string, 2> a3 = { std::string("a"), "b" }; }
從上面的例子中,我們可以明顯看見array與vector定義的不同。array定義時需要指定容器的大小,且與容器中實際的元素個數匹配。其他基本與vector相同。與vector一樣,array也有元素訪問的一些操作,而且基本與vector一致,直接放上示例程式碼吧:
//array Demo #include <iostream> #include <array> using std::array; int main() { array<int, 4> arr1 = { 1, 2, 3, 4 }; std::cout << arr1.at(2) << std::endl; std::cout << arr1[2] << std::endl; std::cout << arr1.front() << std::endl; std::cout << arr1.back() << std::endl; std::cout << arr1.data() << std::endl; std::cout << *arr1.data() << std::endl; return 0; }
看上面的程式碼,是不是跟我們上一篇文章寫的vector一樣?
下面我們再看一下array的迭代器,還是先上程式碼吧,很多時候,程式碼顯得更加親切:
... array<int, 4> arr1 = { 1, 2, 3, 4 }; for (auto i = arr1.begin(); i != arr1.end(); ++i) std::cout << *i << std::endl; for (auto i = arr1.cbegin(); i != arr1.cend(); ++i) std::cout << *i << std::endl; for (auto i = arr1.rbegin(); i != arr1.rend(); ++i) std::cout << *i << std::endl; ...
上面我們可以看出前兩對迭代器跟vector的一樣,不再細說。這裡補充一下說rbegin,rend。其實,vector中也是有這兩對獲取迭代器的方法的,昨天文章遺漏了,正好今天補充一下。
rbegin與rend中的r其含義是reverse(反向的),這兩個方法其實就是返回反向的迭代器,所有rbegin其實就是獲取array的末尾迭代器,rend就是獲取array的其實迭代器,實現了逆向遍歷,這樣看來是不是操作array或者vector更加方便了呢?
除此以外,array也有容量相關的一些操作函數,還是先上程式碼吧:
std::cout << arr1.empty() << std::endl; std::cout << arr1.size() << std::endl; std::cout << arr1.max_size() << std::endl;
好像沒啥可說的,好了,今天就到這裡,別問,問就是沒啥可說的,簡單的技術,我就不想說太多,走走形式,顯得更完整