Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
1

Копирование массивов

03.11.2014, 13:55. Показов 6508. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализуйте функцию копирования элементов copy_n из массива источника типа U* в целевой массив типа T*, где T и U произвольные типы, для которых определено преобразование из U в T. На вход функция принимает два указателя и количество элементов, которые необходимо скопировать.

int ints[] = {1, 2, 3, 4};
double doubles[4] = {};
copy_n(doubles, ints, 4); // теперь в массиве doubles содержатся элементы 1.0, 2.0, 3.0 и 4.0

Ну вот что то такое придумал, но в чем то ошибка. Помогите плз
C++
1
2
3
4
5
6
template <typename T, typename U>
    void copy__n(U* mass1, T* mass2, int n){
    for(int i = 0; i<n; ++i){
         mass2[i] = (T)mass1[i];
    }
   }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2014, 13:55
Ответы с готовыми решениями:

Копирование массивов
Уважаемые форумчане помогите решить задачку про массивы. У меня не получается... Суть задачи:...

Копирование массивов
Помогите решить проблемку. Нашел в нете функцию memcpy(), которая должна по идее копировать один...

Копирование массивов
Есть функция расширения массива обьясните пожалуйста почему если выбросить некоторые операции она...

Копирование массивов char
Вот пример из книги Дейтела: #include &lt;iostream&gt; using std::cout; using std::endl; #include...

10
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.11.2014, 14:46 2
Предлагаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cassert>
 
template <typename T, typename U>
void copy_n(const T &from, U &to, size_t n) {
   size_t size_from = sizeof (T) / sizeof *from;
   size_t size_to = sizeof (U) / sizeof *to;
   assert(n <= size_from && n <= size_to);
 
   for (size_t i = 0; i < n; ++i) {
      to[i] = from[i];
   }
}
 
int main()
{
    int ari[] = {1,2,3,4,5};
    double ard[sizeof ari/ sizeof *ari] = {0};
 
    copy_n(ari, ard, 5);
 
    for (size_t i = 0; i < sizeof ard / sizeof *ard; ++i)
       std::cout << ard[i] << " ";
}
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
03.11.2014, 14:48 3
Если бы было без преобразования типов, то можно было и без циклов и указателей скопировать одним выражением.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.11.2014, 14:59 4
Цитата Сообщение от DiffEreD Посмотреть сообщение
C++
1
size_t n
И всё-таки size_t в std...
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.11.2014, 15:01 5
Есть и в std и в глобальной области видимости.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.11.2014, 15:07 6
Во-первых, он в cstddef. Во-вторых, в глобальной он может быть, как и всё остальное сишное, но не обязан.
0
al_ryaz
08.11.2014, 10:01 7
Реализация правильная, только перепутано что откуда копировать. Условие сформулировано немного запутанно, но пример должен помочь
2 / 2 / 0
Регистрация: 01.04.2017
Сообщений: 29
18.08.2017, 18:07 8
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

template <class U, class T>

void copy_n(T* mass1, U* mass2, size_t e) {
for (int q = 0; q != e; q++)
mass1[e] = (T)mass2[e];
}

int main()
{
int ints[] = { 1, 2, 3, 4 };
double doubles[4] = {};
copy_n(doubles, ints, 4);
for (int t = 0; t != 4; t++)
std::cout << doubles[t];
return 0;
}



Я прохожу онлайн курс программирования. Почему у них это компилируется и выдает неверный ответ, а у меня в вижуал студио не компилируется?

Добавлено через 15 секунд
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

template <class U, class T>

void copy_n(T* mass1, U* mass2, size_t e) {
for (int q = 0; q != e; q++)
mass1[e] = (T)mass2[e];
}

int main()
{
int ints[] = { 1, 2, 3, 4 };
double doubles[4] = {};
copy_n(doubles, ints, 4);
for (int t = 0; t != 4; t++)
std::cout << doubles[t];
return 0;
}



Я прохожу онлайн курс программирования. Почему у них это компилируется и выдает неверный ответ, а у меня в вижуал студио не компилируется?
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
18.08.2017, 19:26 9
Цитата Сообщение от Иван76Чернов Посмотреть сообщение
у меня в вижуал студио не компилируется
И что пишет?

Добавлено через 8 минут
Цитата Сообщение от Иван76Чернов Посмотреть сообщение
C++
1
mass1[e] = (T)mass2[e];
C++
1
mass1[q] = (T)mass2[q];
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
18.08.2017, 19:39 10
Цитата Сообщение от Иван76Чернов Посмотреть сообщение
а у меня в вижуал студио не компилируется?
using namespace std; наконец-то сделал своё грязное дело.
http://en.cppreference.com/w/cpp/algorithm/copy_n
0
2 / 2 / 0
Регистрация: 12.05.2020
Сообщений: 4
22.05.2020, 23:55 11
А я предлагаю вот так:
#include <cstddef>

#include <iostream>

template <class U, class T>

void copy_n(T* mass1, U* mass2, size_t e) {
for (int q = 0; q != e; q++)
mass1[q] = (T)mass2[q];
}
0
22.05.2020, 23:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2020, 23:55
Помогаю со студенческими работами здесь

Копирование текстовых массивов
Всем привет! Пацаны подскажите пожалуйста. Как переменной присвоить слово? Можно так вот...

Копирование символьных массивов
Вот самые проблемные места: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Быстрое копирование массивов с условиями
Доброго времени суток. У меня вопрос по поводу копирования массивов. Есть два массива: uint8_t...

Копирование двумерных динамических массивов
Суть, есть два двумерных динамических массива одного размера, нужно скопировать в первый второй,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru