Publicado em: 04/Jan/2020
Atualizado em: 08/Jan/2020
C++

C++: array

Características

  • é um wrapper para o array do C
  • array oferece uma sintaxe mais amigável comparada com a array do C
  • pode ser passado e retornado por valor
  • pode ser passado e retornado por referência
  • uso mais conveniente de size
  • uso mais conveniente de iteradores STL
  • possui exatamente a mesma performace da array do C

Array vs Vector

  • array é estático e possui tamanho definido em tempo de compilação
  • vector é dinâmico e é alocado no heap

Exemplos

 1#include <algorithm>
 2#include <array>
 3#include <iostream>
 4
 5using namespace std;
 6
 7// Multidimensionais
 8template <class T, size_t ROW, size_t COL>
 9using Matrix = std::array<std::array<T, COL>, ROW>;
10
11template <class T, size_t I, size_t... J>
12struct MultiDimArray {
13  using Nested = typename MultiDimArray<T, J...>::type;
14  using type   = std::array<Nested, I>;
15};
16
17template <class T, size_t I>
18struct MultiDimArray<T, I> {
19  using type = std::array<T, I>;
20};
21
22int main( int argc, char **argv )
23{
24  auto print = []( const auto &arr ) {
25    cout << "{ ";
26    for( const auto &x : arr ) {
27      cout << x << " ";
28    }
29    cout << "}" << endl;
30  };
31
32  array<int, 3> a    = {2, 1, 3};
33  int           c[3] = {2, 1, 3}; // old C style
34
35  sort( a.begin(), a.end() );
36  print( a ); // { 1, 2, 3 }
37
38  sort( begin( c ), end( c ) ); // c == { 1, 2, 3 }
39  print( c );
40
41  for( auto &x : a ) {
42    x *= 2;
43  }
44  print( a ); // { 2, 4, 6 }
45
46  for( auto &x : c ) {
47    x *= 2;
48  }
49  print( c ); // { 2, 4, 6 }
50
51  array<array<int, 3>, 3> arr = {{{5, 8, 2}, {8, 3, 1}, {5, 3, 9}}};
52  cout << arr[2][2] << endl; // 9
53
54  Matrix<float, 3, 4> mat;
55  mat[1][2] = 5;
56
57  MultiDimArray<int, 2, 3, 4, 5>::type multi;
58  multi[1][1][1][1] = 5;
59
60  return 0;
61}

Referências

comments powered by Disqus