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

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

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

Студворк — интернет-сервис помощи студентам
Реализуйте функцию копирования элементов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2014, 13:55
Ответы с готовыми решениями:

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

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

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

10
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.11.2014, 14:46
Предлагаю так:
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
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
03.11.2014, 14:48
Если бы было без преобразования типов, то можно было и без циклов и указателей скопировать одним выражением.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.11.2014, 14:59
Цитата Сообщение от DiffEreD Посмотреть сообщение
C++
1
size_t n
И всё-таки size_t в std...
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.11.2014, 15:01
Есть и в std и в глобальной области видимости.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.11.2014, 15:07
Во-первых, он в cstddef. Во-вторых, в глобальной он может быть, как и всё остальное сишное, но не обязан.
0
al_ryaz
08.11.2014, 10:01
Реализация правильная, только перепутано что откуда копировать. Условие сформулировано немного запутанно, но пример должен помочь
2 / 2 / 0
Регистрация: 01.04.2017
Сообщений: 30
18.08.2017, 18:07
#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
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
18.08.2017, 19:26
Цитата Сообщение от Иван76Чернов Посмотреть сообщение
у меня в вижуал студио не компилируется
И что пишет?

Добавлено через 8 минут
Цитата Сообщение от Иван76Чернов Посмотреть сообщение
C++
1
mass1[e] = (T)mass2[e];
C++
1
mass1[q] = (T)mass2[q];
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
18.08.2017, 19:39
Цитата Сообщение от Иван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
А я предлагаю вот так:
#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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2020, 23:55
Помогаю со студенческими работами здесь

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

Копирование текстовых массивов
Всем привет! Пацаны подскажите пожалуйста. Как переменной присвоить слово? Можно так вот например: char a = &quot;lalala&quot;; А...

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru