/ / C ++ składnia wektora 2D - c ++, stl

Składnia C ++ wektora 2D - c ++, stl

Czy ktoś może wyjaśnić poniżej składnię c ++ za pomocą przykładu?

vector <vector <int> > s(n,vector <int> ());

szczególnie ta część wewnątrz konstruktora:

vector <int> ()

Odpowiedzi:

5 dla odpowiedzi № 1

Ten specyficzny konstruktor wektora przyjmuje dwa argumenty:

  1. Liczba elementów.
  2. Wartość do przypisania do każdego elementu.

Na przykład tworzy wektor zawierający 3 razy wartość 5.

std::vector<int> vec(3, 5);

vector<int>() jest instancją domyślną o wartości vector<int>. Tworzysz wektor zawierający n wektorów, każdy pusty.


0 dla odpowiedzi nr 2
#include <vector>
using namespace std;

int main()
{
int N = 10;
std::vector< std::vector<int> vector2DA(N, std::vector< int>(N));
return 0;

}

Ten kod utworzyć vector2D 10x10, pierwszym konstruktorem parametru jest podstawowy wektor wielkości (vector2DA (size, objectWhichIsContain)), który zawiera inny wektor, który ma rozmiar 10 (std::vector< int>(size)). Mamy vector2D 10x10.


0 dla odpowiedzi № 3

Po pierwsze, vector z vectors nie jest dokładnie "wektorem 2D". "Wiersze" vector<vector<>> są całkowicie niezależne zarówno pod względem układu pamięci, jak i semantycznie. Są lepsze opcje, np. Boost.Multi_array.

Następnie mamy vector <int> (). W zależności od kontekstu może to oznaczać zarówno tymczasową inicjalizację obiektu, jak i deklarację funkcji. Ten przykład faktycznie nie zapewnia wystarczającego kontekstu:

vector <vector <int> > s(n,vector <int> ());

Gdyby n tak się składa, że ​​jest to nazwa typu, wtedy ta linia jest deklaracją funkcji. Oczywiście n jest prawdopodobnie int, ale lepiej byłoby wyraźnie stwierdzić, że chcesz skonstruować domyślnie vector<int> jako drugi argument:

vector <vector <int> > s(n,vector <int> {});

Tutaj vector <int> {} jednoznacznie oznacza "domyślnie skonstruowany obiekt tymczasowy typu vector<int>"i przekazujesz go do vector<vector<int>> konstruktor jako wartość do zainicjowania wierszy.

To prowadzi nas do innej obserwacji: std::vector value-initializes jego elementy domyślnie, co oznacza, że ​​ten sam wynik można osiągnąć w ten sposób:

vector <vector <int> > s(n);

Wreszcie obecność vector<int>() w oryginalnym oświadczeniu pewne wskazówki, że mogło to być przeznaczone do ustawienia "szerokości" wektora 2D:

vector <vector <int> > s(n,vector <int> (m));

ale m zgubił się gdzieś wzdłuż linii :)