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 № 1Ten specyficzny konstruktor wektora przyjmuje dwa argumenty:
- Liczba elementów.
- 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 vector
s 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 :)