2013-06-28 9 views
11

Osiągam identyczne wyniki przy użyciu różnych kontenerów w C++. Na przykład . .Jaki typ auto wykorzystuje do kontenerów?

std::array<int, 5> v = {1,2,3,4,5}; 
    for(auto i : v) 
     std::cout << i << ", "; 

lub

std::vector<int> v = {1,2,3,4,5}; 

lub

int v[] = {1,2,3,4,5}; 

itp. .

Jakiego pojemnika używa tutaj?

auto v = {1,2,3,4,5}; 
    for(auto i : v) 
     std::cout << i << ", "; 

Odpowiedz

18

std::initializer_list<int>


Nie tak trudno sprawdzić na własne oczy, zawsze można decltype(v), a następnie porównać je ze wspomnianym typu lista.

To ma inny ładny obiekt, który czasami jest bardzo przydatne i mogą Cię interesować:

for (auto i : {1,2,3,4,5}) 
    std::cout << i << ", "; 

Można to zrobić ponieważ initializer_list utrzymuje standardowy interfejs zasięgu.

+1

'<< TYPE_DESC (v); auto v = {1,2,3,4,5}; '/' lvalue initializer_list 'Poprawnie. +1 –

+2

Dwie małe uwagi: Ściśle mówiąc, 'initializer_list' nie jest kontenerem w rozumieniu standardu. Twój przykład działa, ponieważ standard wyraźnie definiuje oparte na odległości instrukcje dla tej formy. Na pierwszy rzut oka nie ma jednostki typu 'initializer_list'. Taki obiekt jest wprowadzany w sposób dorozumiany, więc musisz zawrzeć '', ale nie możesz tego "zobaczyć". – MWid

Powiązane problemy