2013-06-28 2 views
11

Я могу добиться идентичного вывода, используя различные контейнеры в C++. Например . ,Какой тип авто используется для контейнеров?

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

или

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

или

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

и т.д.. ,

И какой контейнер auto использовать здесь?

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

ответ

18

std::initializer_list<int>


Не так уж трудно проверить для себя, вы всегда decltype(v), а затем можно сравнить его с указанным типом списка.

Это имеет еще одно приятное свойство, что иногда очень полезно и может вас заинтересовать:

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

Это может быть сделано, потому что initializer_list поддерживает стандартный интерфейс диапазона.

+1

'<< TYPE_DESC (v); auto v = {1,2,3,4,5}; '/' lvalue initializer_list 'Исправить. +1 –

+2

Два небольших замечания: Строго говоря, 'initializer_list' не является контейнером в смысле стандарта. Ваш пример работает, потому что в стандарте явно определяются выражения для этой формы. На первый взгляд нет сущности типа 'initializer_list'. Такой объект вводится неявно, поэтому вам нужно включить '', но вы не можете «видеть» его. – MWid

Смежные вопросы