Каков самый простой способ преобразования массива в вектор?

Каков самый простой способ преобразования массива в вектор?

void test(vector _array) { ... } int x[3]={1, 2, 3}; test(x); // Syntax error. 

Я хочу преобразовать x из int массива в вектор простейшим способом.

    Используйте vector конструктор, который принимает два iteratorа, обратите внимание, что указатели являются действительными iteratorами и используют неявное преобразование из массивов в указатели:

     int x[3] = {1, 2, 3}; std::vector v(x, x + sizeof x / sizeof x[0]); test(v); 

    или

     test(std::vector(x, x + sizeof x / sizeof x[0])); 

    где sizeof x / sizeof x[0] , очевидно, 3 в этом контексте; это общий способ получения количества элементов в массиве. Обратите внимание, что x + sizeof x / sizeof x[0] указывает на один элемент за последним элементом.

    Лично мне очень нравится подход C ++ 2011, потому что он не требует от вас использования sizeof() не помню настройки границ массива, если вы когда-либо изменяете границы массива (и вы можете определить соответствующую функцию в C ++ 2003, если вы хочу тоже):

     #include  #include  int x[] = { 1, 2, 3, 4, 5 }; std::vector v(std::begin(x), std::end(x)); 

    Очевидно, что с C ++ 2011 вы, возможно, захотите использовать списки инициализаторов:

     std::vector v({ 1, 2, 3, 4, 5 }); 

    Указатели могут использоваться как любые другие iteratorы:

     int x[3] = {1, 2, 3}; std::vector v(x, x + 3); test(v) 

    Здесь вы задаете неправильный вопрос – вместо того, чтобы вставлять все в вектор, спросите, как вы можете преобразовать тест для работы с iteratorами вместо конкретного контейнера. Вы можете обеспечить перегрузку, чтобы сохранить совместимость (и одновременно обращаться с другими контейнерами):

     void test(const std::vector& in) { // Iterate over vector and do whatever } 

    будет выглядеть так:

     template  void test(Iterator begin, const Iterator end) { // Iterate over range and do whatever } template  void test(const Container& in) { test(std::begin(in), std::end(in)); } 

    Что позволяет:

     int x[3]={1, 2, 3}; test(x); // Now correct 

    ( Идеальная демонстрация )

    Давайте будем гением компьютера.