std copy



Автор Маша Не-скажу задал вопрос в разделе Другие языки и технологии

Что в этой операции означает "+" ? (язык С)
std::copy(Vector_1,Vector_1+Size,Vector_2); и получил лучший ответ

Ответ от Николай[гуру]
просто сложение

Ответ от FeOs[гуру]
что в предложении 2+1 означает "+" С первого класса никто ответить толком не может. А Я так мучаюсь! Я всю жизнь потратил на это. Даж купил кучу книг, начиная от " "+" для чайников" и заканчивая книгой " "+" - как мировоздание человечества"... ПОМОГИИИИТЕЕЕЕЕ!

Ответ от Krab Вark[гуру]
Плюс означает конкатенацию, если тебе это поможет (в просторечии называемую сложением, так как для нее используется знак +). То есть приписывание к одной строке другой строки.

Ответ от Psevdonim[гуру]
Вообще-то должно быть так:
std::copy(Vector_1.begin(),Vector_1.begin()+Size,Vector_2.begin()) ;
Vector_1.begin()+Size означает "итератор, указывающий на Size-ый элемент вектора", если Size == Vector_1.size(), то он равен Vector_1.end()

Ответ от Ёыроежка[гуру]
Во-первых, это не С, а С++, так как в С нет пространства имен std::.
Во-вторых, std::copy - это стандартный алгоритм языка С++, позволяющий копировать последовательность.
В вашем примере не ясно, что такое Vector_1. Либо это указатель базвого типа данных, либо уто итератор вектора, либо это сам вектор. От того, что означает Vector_1 ответ может быть разным.
Итак, допустим, что Vector_1 - это указатель на массив основного типа данных или массив
Например,
int Vector_1{]
а size - это размер вашего массива.
Тогда ваше выражение написано правильно и осуществляет копирование из одного массива в другой.
std::copy(Vector_1,Vector_1+Size,Vector_2);
То есть вы из массива Vector_1 копируете все size элементов в массив Vector_2.
Это справедливо и если Vector_1 т Vector_2 - итераторы прямого доступа, например, для калсса std::vector.
Ежели это не итераторы и не указатели, а сами вектора, то надо использовать метод begin() или rbegin() для получения начального итератора для вектора.
Но скорей всего у вас это, как я уже сказал, либо указатели, либо итераторы, и выражение написано правильно
А самое главное = я не ответил на ваш вопрос! Плюс в данном выражении означает арифметику с указателями! То есть к начальному указателю Vector_1 вы прибавляете size элементов того размера, каким у вас определен тип для Vector_1.
Например, у вас есть целочисленный массив из 4 элементов
int Vector_1[ 4 ];
Тогда в вашем выражении Vector_1 будет указывать на начало массива, а Vector_1 + 4 ( в вашем примере это size) будет указывать на область памяти ЗА последним элементом массива! Тем самым вы задаете диапазон от первого элемента и до элемента, стоящим за последним элементом массива.
То есть алгоримт copy можно просто переписать
int *first = Vector_1;
int * last = Vector_1 + 4;;
for ( ; first != last; ++first )
{
Vector_2++ = first;
}
То есть это есть ничто иное, как перписывание одного массива в другой с помощью указателей!:)

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Что в этой операции означает "+" ? (язык С)
std::copy(Vector_1,Vector_1+Size,Vector_2);
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*