2014-05-26 2 views
3

У меня есть функция, которая получает std::vector<int> как таковой:список Вектор инициализатор передается в качестве параметра функции

void foo(std::vector<int>); 

И я хотел бы неоднократно называть foo() с малыми векторами, генерируемых на лету. Я пытался создать новый вектор «на лету», используя список инициализаторов, но он, кажется, выделяет вектор размером n вместо инициализации.

Например:

foo(std::vector<int> { 1}); 
foo(std::vector<int> { 4}); 
foo(std::vector<int> { 5}); 

Кажется создать 3 векторы, выделенные на 1, 4 и 5 по умолчанию (0) элементов соответственно.

Вместо этого я хотел бы создать 3 вектора размера 1, но со значениями 1, 4 и 5. Я знаю, что я мог бы использовать конструктор (n, value), как vector<int> (1,1), (1,4) и (1,5), но для моего понимания я хотел бы понять, почему мой список инициализаций не выполняет то, что я ожидаю.

+0

Это должно работать. Даже «foo ({1)) и т. Д. В порядке. – chris

+0

Я получаю поведение, которого вы ожидаете. Я тестировал его на Linux, используя g ++ 4.7.3. Какую платформу вы используете? –

+0

Я использую встроенный Android с clang 3.1. Я строю для Android 4.2.2, рука 32 бит. – user3277261

ответ

3

Объявление std::vector<int> { 1} создает 1 элемент со значением как 1. Созданный элемент будет иметь значение 1 на 0-й позиции.

Объявление std::vector<int> (1,6) создает 1 элемент со значением как 6. Созданный элемент будет иметь значение 6 на 0-й позиции.

Заявление, содержащееся в вопросе, работает нормально.

#include <iostream> 
#include <vector> 


void foo(std::vector<int> vec) 
{ 
    std::cout<<"size of vec "<<vec.size()<<std::endl; 

    for(int x =0; x < vec.size(); ++x) 
    { 
     std::cout<<vec[x]<<std::endl; 
    } 
    std::cout<<std::endl; 
} 

int main() 
{ 
    foo(std::vector<int> { 1}); 
    foo(std::vector<int> { 4}); 
    foo(std::vector<int> { 5}); 
    foo(std::vector<int> (1,6)); 

    return 0; 
} 
+0

Что означает «выделяет 1 элемент со значением как 2», даже означает? – juanchopanza

+0

@juanchopanza Я думаю, что это означает 'capacity() == 2'. – Constructor

+0

@Constructor Я серьезно сомневаюсь в этом! – juanchopanza

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