Тут було багато відповідей, і майже всі вони зроблять роботу.
Однак є кілька оманливих порад!
Ось варіанти:
vector<int> dataVec;
int dataArray[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
unsigned dataArraySize = sizeof(dataArray) / sizeof(int);
// Method 1: Copy the array to the vector using back_inserter.
{
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 2: Same as 1 but pre-extend the vector by the size of the array using reserve
{
dataVec.reserve(dataVec.size() + dataArraySize);
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 3: Memcpy
{
dataVec.resize(dataVec.size() + dataArraySize);
memcpy(&dataVec[dataVec.size() - dataArraySize], &dataArray[0], dataArraySize * sizeof(int));
}
// Method 4: vector::insert
{
dataVec.insert(dataVec.end(), &dataArray[0], &dataArray[dataArraySize]);
}
// Method 5: vector + vector
{
vector<int> dataVec2(&dataArray[0], &dataArray[dataArraySize]);
dataVec.insert(dataVec.end(), dataVec2.begin(), dataVec2.end());
}
Скоротити довгу історію короткий метод 4, використовуючи вектор :: insert, найкращий сценарій bsruth.
Ось деякі деталі горіха:
Спосіб 1 , мабуть, найпростіший для розуміння. Просто скопіюйте кожен елемент з масиву та натисніть на задню частину вектора. На жаль, це повільно. Оскільки є цикл (мається на увазі функція копіювання), кожен елемент повинен оброблятися індивідуально; жодне поліпшення продуктивності не може бути здійснене виходячи з того, що ми знаємо, що масив і вектори є суміжними блоками.
Метод 2 - запропоноване поліпшення ефективності методу 1; просто попередньо зарезервуйте розмір масиву перед його додаванням. Для великих масивів це може допомогти. Однак найкраща порада тут ніколи не використовувати резерв, якщо профілювання не підкаже, що ви можете отримати поліпшення (або вам потрібно переконатися, що ваші ітератори не будуть визнані недійсними). Б'ярн погоджується . Між іншим, я виявив, що цей метод проводився найповільніше, хоча я намагаюся всебічно пояснити, чому він регулярно значно повільніше, ніж метод 1 ...
Метод 3 - це рішення старої школи - киньте трохи проблеми C! Відмінно і швидко працює для типів POD. У цьому випадку потрібно змінити розмір, оскільки memcpy працює поза межами вектора, і немає можливості сказати вектору, що його розмір змінився. Крім некрасивого рішення (копіювання байтів!) Пам’ятайте, що це можна використовувати лише для типів POD . Я б ніколи не використовував це рішення.
Метод 4 - найкращий шлях. Це сенс зрозумілий, він (як правило) найшвидший і працює для будь-яких об'єктів. Немає недоліків використання цього методу для цього додатка.
Метод 5 - це налаштування методу 4 - скопіюйте масив у вектор, а потім додайте його. Хороший варіант - як правило, швидко і зрозуміло.
Нарешті, ви знаєте, що можете використовувати вектори замість масивів, правда? Навіть коли функція очікує масивів у стилі c, ви можете використовувати вектори:
vector<char> v(50); // Ensure there's enough space
strcpy(&v[0], "prefer vectors to c arrays");
Сподіваюся, що хтось там допомагає!