В чем преимущество использования std::copy вместо ручного цикла for для копирования динамического массива?C++

Программы на C++. Форум разработчиков
Anonymous
 В чем преимущество использования std::copy вместо ручного цикла for для копирования динамического массива?

Сообщение Anonymous »

Предположим, у меня есть следующий код:

Код: Выделить всё

int* intPtr = new int[5];

// ...do stuff...
И теперь я хочу скопировать intPtr в новый идентичный массив:

Код: Выделить всё

int* newIntPtr = new int[5];
Это можно сделать с помощью простого цикла for или std::copy():
  • Использование цикла for

    Код: Выделить всё

    for (int i = 0; i < 5; i++)
    *(newIntPtr + i) = *(intPtr + i);
    
  • Использование std::copy()

    Код: Выделить всё

    std::copy( intPtr, intPtr + 5, newIntPtr );
    
Используя std::copy(), я получаю предупреждение в Visual Studio :

Код: Выделить всё

warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe...
Я мог бы использовать stdext::checked_array_iterator, чтобы предупреждение исчезло далеко:

Код: Выделить всё

std::copy(intPtr, intPtr + 5, stdext::checked_array_iterator(newIntPtr, 5));
но это означает, что код не будет компилироваться ни на чем другом, кроме Visual Studio.

Итак, как же следует Я решу это? Должен ли я использовать простой цикл for и эффективно избегать предупреждения, или мне следует использовать std::copy() и что-то сделать, чтобы избежать предупреждения? Конечно, я мог бы отключить предупреждение, но это не похоже на правильное решение... или нет?

Подробнее здесь: https://stackoverflow.com/questions/290 ... opy-dynami

Вернуться в «C++»