Array是container class array<>的一個實例,是一個固定長度的元素序列。ios
在使用array以前,須要include頭文件:函數
#include <array>
// all elements of x have value 0 (int()) array<int,4> x = {}; //use an initializer list to initialize array array<int,5> coll = { 42, 377, 611, 21, 44 }; // one element with value 42, followed by 9 elements with value 0 array<int,10> c2 = { 42 };
Operation | Effect |
array<Elem, N> c | 默認構造函數:使用默認初始化元素建立一個array |
array<Elem, N> c(c2) | 複製構造函數:經過複製建立一個相同的array(全部元素都被複制) |
array<Elem, N> c = c2 | 複製構造函數:經過複製建立一個相同的array(全部元素都被複制) |
array<Elem, N> c(rv) | Move constructor:creates a new array taking the contents of the rvalue rv |
array<Elem, N> c = rv | Move constructor:creates a new array taking the contents of the rvalue rv |
array<Elem, N> c = initList | Creates an array initialized with the elements of the initializer list |
Operation | Effect |
c.empty() | 返回容器是否爲空(至關於size() == 0) |
c.size() | 返回當前元素的個數 |
c.max_size() | 返回可能存在元素的最大個數 |
c1 == c2 | 返回c1是否等於c2 |
c1 != c2 | 返回c1是否不等於c2 |
c1 < c2 | 返回c1是否小於c2 |
c1 > c2 | 返回c1是否大於c2 |
c1 <= c2 | 返回c1是否小於等於c2 |
c1 >= c2 | 返回c1是否大於等於c2 |
Operation | Effect |
c = c2 | 將c2全部的元素賦給c |
c = rv | Move assigns all elements of the rvalue rv to c |
c.fill(val) | 將值val賦給c的每個元素 |
c1.swap(c2) | 交換c1和c2的數據 |
swap(c1, c2) | 交換c1和c2的數據 |
Operation | Effect |
c[idx] | 返回索引爲idx的元素(沒有邊界檢查) |
c.at(idx) | 返回索引爲idx的元素(當idx超出邊界,拋出range-error異常) |
c.front() | 返回第一個元素(不檢查第一個元素是否存在) |
c.back() | 返回最後一個元素(不檢查最後一個元素是否存在) |
Operation | Effect |
c.begin() | 返回第一個元素的隨機訪問迭代器 |
c.end() | 返回位於最後一個元素以後的隨機訪問迭代器 |
c.cbegin() | 返回第一個元素的常量隨機存取迭代器 |
c.cend() | 返回位於最後一個元素以後的常量隨機訪問迭代器 |
c.rbegin() | 返回反向迭代器,指向最後一個元素 |
c.rend() | 返回反向迭代器,位於第一個元素以前 |
c.crbegin() | 返回常量反向迭代器,指向最後一個元素 |
c.crend() | 返回常量反向迭代器,位於第一個元素以前 |
Array提供了tuple 接口,因此:spa
例:code
typedef std::array<std::string, 5> FileStrings; FiveStrings a = {"hello", "nico", "how", "are", "you"}; std::tuple_size<FiveStrings>::value // 5 std::tuple_element<1, FiveStrings>::type // std::string std::get<1>(a) // std::string("nico")
#include <array> #include <algorithm> #include <functional> #include <numeric> #include "print.hpp" using namespace std; int main() { //create array with 10 ints array<int, 10> a = {11, 22, 33, 44 }; PRINT_ELEMENTS(a); //modify last two elements a.back() = 9999999; a[a.size() - 2] = 42; PRINT_ELEMENTS(a); //process sum of all elements cout<< "sum: " << accumulate(a.begin(), a.end(), 0) << endl; //negate all elements transform(a.begin(), a.end(), //source a.begin(), //destinatic negate<int>()); //operation PRINT_ELEMENTS(a); } // print.hpp #include<iostream> #include<string> //PRINT_ELEMENTS() // - prints optional string optstr followed by // - all elements of the collection coll // - in one line,separated by spaces template <typename T> inline void PRINT_ELEMENTS(const T& coll, const std::string& optstr="") { std::cout << optstr; for(const auto& elem : coll) { std::cout << elem << ' '; } std::cout << std::endl; }
輸出:orm