Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дописывание данных в массив 
:(
    Опции темы
Nikita_85
Дата 3.8.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.7.2007

Репутация: нет
Всего: нет



Здрасте!
Поскажите, пожалуйста, есть ли в C++ функция, которая позволяет дописывать данные в массив из другого массива?

Заранее спасибо!
PM MAIL   Вверх
FiMa1
Дата 3.8.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



а что за массивы, если массивы char, то strcat, к примеру. А так самому можно написать функцию..
PM   Вверх
Lazin
Дата 3.8.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



если в С++ то юзай контейнеры, например vector, если всё таки нужно использовать массив, то realloc, затем memcpy 
PM MAIL Skype GTalk   Вверх
bsa
Дата 3.8.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



PM   Вверх
FiMa1
Дата 3.8.2007, 14:47 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



ну или вот кустарная версия конкатенации двух массивов целых значений. Склеивание, начиная с некоторой  позиции конечного массива. smile .
Код
#include <iostream>

void intcat(int arr1[], int arr2[], int arr1len, int arr2len, int indx)
{
    int i, j;

    for(i = indx, j = 0; i < arr1len; i++)
        arr1[i] = arr2[j++];
}

int main()
{    
    int arr1[6] = { 1, 2, 3 };
    int arr2[3] = { 4, 5, 6 };

    const int ARR1LEN = sizeof(arr1) / sizeof(int);
    const int ARR2LEN = sizeof(arr2) / sizeof(int);

    intcat(arr1, arr2, ARR1LEN, ARR2LEN, 3);
    
    for(int i = 0; i < ARR1LEN; i++)
        std::cout << arr1[i];
}


Это сообщение отредактировал(а) FiMa1 - 3.8.2007, 14:51
PM   Вверх
Любитель
Дата 3.8.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



FiMa1, неэффективно. memcpy тогда уж smile


--------------------
PM MAIL ICQ Skype   Вверх
Xenon
Дата 3.8.2007, 23:37 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Можно даже не изобретать велосипед smile
Код

const int SIZE = 4;
const int SIZE2 = 8;

int main(int argc, char argv[]) 
{
    int arr [SIZE] = { 5,6,7,8 };
    int arr2 [SIZE2] = { 1,2,3,4 };
    std::merge(arr, arr + SIZE, arr2, arr2 + SIZE, arr2);
    std::copy( arr2, arr2 + SIZE2, std::ostream_iterator<int>(std::cout, " ") );
    return 0;
}



--------------------
user posted image  
PM MAIL   Вверх
Xenon
Дата 4.8.2007, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



FiMa1, кстати по поводу твоего кода. Чего мешает делать хотя бы так smile :
Код

void intcat(int arr1[], int arr2[], int arr1len, int arr2len, int indx)
{
   for(int i = indx, j = 0; i < arr1len; ++i, ++j)
        arr1[i] = arr2[j];
}



--------------------
user posted image  
PM MAIL   Вверх
Nikita_85
Дата 6.8.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.7.2007

Репутация: нет
Всего: нет



Всем спасибо за советы!

Дело в том, что дописывание в массив происходит внутри цикла while. Поэтому в каждом круге некоторая информация должна записываться в выходной массив. Как можно это сделать? (ведь в приведенных выше советах циклы for с переменной i и функция memcpy не подходят, так как выходной массив тогда будет переписываться каждый раз)
PM MAIL   Вверх
NoNo
Дата 6.8.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Лудше используй vector....
а так перераспределяй в каждом круге памятья по новой

PM MAIL   Вверх
Nikita_85
Дата 7.8.2007, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.7.2007

Репутация: нет
Всего: нет



Прошу прощения за неумный вопрос, как распределять память? Может об этом можно почитать где-нибудь?
PM MAIL   Вверх
Xenon
Дата 7.8.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Nikita_85, ну я думаю человек имел ввиду выделение блока памяти большего, чем был, копирование информации из старого блока в новый, удаление старого.


--------------------
user posted image  
PM MAIL   Вверх
Rockie
Дата 9.8.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Nikita_85 @  7.8.2007,  08:39 Найти цитируемый пост)
Прошу прощения за неумный вопрос, как распределять память?

Это лучше на менеджер памяти переложить.

Цитата(Xenon @  7.8.2007,  14:47 Найти цитируемый пост)
выделение блока памяти большего, чем был, копирование информации из старого блока в новый, удаление старого.

Это можно, но вряд ли нужно..




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1060 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.