соединение 2-х массивов
От: emergenter Россия  
Дата: 25.06.04 05:17
Оценка:
Подскажите пожалуйста!
Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];

Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?

Заранее благодарен!
Re: соединение 2-х массивов
От: Korikoff Pavel Россия http://www.intrice.com/
Дата: 25.06.04 05:33
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Подскажите пожалуйста!

E>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];

E>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?


Можно так:
unsigned int mas1[40];
unsigned int* mas2 = mas1 + 20
mas2[1] = 100; // Эквивалентно mas1[41] = 100

если я правильно понял, что нужно...
Re[2]: соединение 2-х массивов
От: emergenter Россия  
Дата: 25.06.04 05:41
Оценка:
В этом решении Вы заранее разделили массив на пополам по 20 элементов это понятно!!
А что делать если заранее размеры не известны! Получили 2 массива по 20 элементов и не хочется заводить выделять новый массив и присваивать ему эти элементы (кажется что это не рациональное решение). Может как то можно по другому?!
Re[3]: соединение 2-х массивов
От: Korikoff Pavel Россия http://www.intrice.com/
Дата: 25.06.04 05:47
Оценка:
Здравствуйте, emergenter, Вы писали:

E>В этом решении Вы заранее разделили массив на пополам по 20 элементов это понятно!!

E>А что делать если заранее размеры не известны! Получили 2 массива по 20 элементов и не хочется заводить выделять новый массив и присваивать ему эти элементы (кажется что это не рациональное решение). Может как то можно по другому?!

Тогда можно посмотреть в сторону HeapReAlloc (и других подобных).
Конечно же, выделять память под массивы необходимо будет HeapAlloc.
Re[4]: соединение 2-х массивов
От: emergenter Россия  
Дата: 25.06.04 05:56
Оценка:
Затрагивать API не очень хотелось!! Просто советский С++!!!
Re: соединение 2-х массивов
От: Korikoff Pavel Россия http://www.intrice.com/
Дата: 25.06.04 06:00
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Подскажите пожалуйста!

E>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];

E>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?


И вообще, делать это лучше std::vector:

std::vector<unsigned int> vec1;
std::vector<unsigned int> vec2;
vec1.reserve(20);
vec2.reserve(20);
//...
std::copy(vec2.begin(), vec2.end(), std::back_inserter(vec1));
Re[5]: соединение 2-х массивов
От: Sir Wiz Россия  
Дата: 25.06.04 06:18
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Затрагивать API не очень хотелось!! Просто советский С++!!!

Ответ на первый вопрос в теме простой — никак.

Ежели хотите динамические структуры, пользуйте динамические методы. Не хотите API — правильно, пользуйте "простой советский" memcpy или memmove, они сами обратятся к API, эти функции ещё от C библиотек перекочевали. Лучшие повара С++ рекомендуют std::vector.
Re: соединение 2-х массивов
От: Flex2 Россия  
Дата: 25.06.04 06:28
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Подскажите пожалуйста!

E>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];

E>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?


E>Заранее благодарен!


unsigned int mas1[20];
unsigned int mas2[20];

int dim_a = (sizeof(mas2)+sizeof(mas2))*sizeof(unsigned int); // Определим размерность будующего массива в байтах
unsigned int *mas3 =(unsigned int*)malloc(int dim_a); // Выделим память
memncpy(mas3,mas1,sizeof(mas1)*sizeof(unsigned int)); // Скопируем в начало нашего массива mas1
mas3 =mas3+sizeof(mas1)*sizeof(unsigned int); // Сдвинем указатель на последний элемент
memncpy(mas3,mas1,sizeof(mas2)*sizeof(unsigned int)); // Запишем второй масиив
mas3 =mas3-(sizeof(mas1)+sizeof(mas2))*sizeof(unsigned int); // Сдвинем указатель на начало нашего массива

На вскидку по моему так.
Re[2]: соединение 2-х массивов
От: emergenter Россия  
Дата: 25.06.04 07:01
Оценка:
Выглядит круто!
А какая библиотека при этом используется???
Как обращаться к жлементам массива???
Re[3]: соединение 2-х массивов
От: nobody2 Россия  
Дата: 25.06.04 07:15
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Выглядит круто!

E>А какая библиотека при этом используется???

Стандартная библиотека C++, которая должна поддерживается всеми компиляторами C++.


E>Как обращаться к жлементам массива???


vec1[0], vec2[3] ... — как к элементам массива.
Re[3]: соединение 2-х массивов
От: _nn_ www.nemerleweb.com
Дата: 25.06.04 07:25
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Выглядит круто!

E>А какая библиотека при этом используется???
E>Как обращаться к жлементам массива???

Библиотека STL — Standard Template Library — Стандартная Библиотека Шаблонов.
Идет практически со всеми компиляторами.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: соединение 2-х массивов
От: jazzer Россия Skype: enerjazzer
Дата: 25.06.04 07:46
Оценка: 1 (1) +1
Здравствуйте, emergenter, Вы писали:

E>Подскажите пожалуйста!

E>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];

E>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?


а зачем тебе?

Если для того, чтобы ходить по нему как по массиву из 40 элементов, то можно так :)

#include <iostream>
#include <string>
using namespace std;

typedef unsigned int UINTARR20[20];

class Arr40
{
public:
    Arr40(UINTARR20& mas1, UINTARR20& mas2): m1(mas1), m2(mas2) {}
    unsigned int& operator[](int i)
    {
    switch (i/20)
    {
        case 0: return m1[i%20];
        case 1: return m2[i%20];
        default: throw string("bad index");
    }    
    }
private:
    UINTARR20& m1;
    UINTARR20& m2;
};

int main()
{
    // исходные массивы
    UINTARR20 mas1 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    UINTARR20 mas2 = {51,52,53,54,55,56,57,58,59,510,511,512,513,514,515,516,517,518,519,520};
    
    // наш супермассив :)
    Arr40 mas40(mas1, mas2);

    // умножим все элементы на 2
    for (int i=0; i<40; i++)
        mas40[i] *= 2;

    // распечатаем результат
    for (int i=0; i<40; i++)
        cerr << mas40[i] << endl;
}


Извращения на кодом предлагаются пытливому читателю в качестве упражнения ;)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: соединение 2-х массивов
От: emergenter Россия  
Дата: 25.06.04 07:46
Оценка:
Так а какой файл подключать с помощью
#include
Re[5]: соединение 2-х массивов
От: _nn_ www.nemerleweb.com
Дата: 25.06.04 08:15
Оценка:
Здравствуйте, emergenter, Вы писали:

E>Так а какой файл подключать с помощью

E>#include

Для vector :
#include <vector>

Использование выше.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: намудрил...
От: rus blood Россия  
Дата: 25.06.04 08:20
Оценка:
Здравствуйте, Korikoff Pavel, Вы писали:

KP>Здравствуйте, emergenter, Вы писали:


E>>Подскажите пожалуйста!

E>>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];

E>>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?


KP>И вообще, делать это лучше std::vector:


KP>
KP>std::vector<unsigned int> vec1;
KP>std::vector<unsigned int> vec2;
KP>vec1.reserve(20);
KP>vec2.reserve(20);
KP>//...
KP>//std::copy(vec2.begin(), vec2.end(), std::back_inserter(vec1));
vec1.insert(vec1.end(), vec2.begin(), vec2.end());
KP>
Имею скафандр — готов путешествовать!
Re[3]: намудрил...
От: Korikoff Pavel Россия http://www.intrice.com/
Дата: 25.06.04 08:43
Оценка:
Здравствуйте, rus blood, Вы писали:

KP>>
KP>>std::vector<unsigned int> vec1;
KP>>std::vector<unsigned int> vec2;
KP>>vec1.reserve(20);
KP>>vec2.reserve(20);
KP>>//...
KP>>//std::copy(vec2.begin(), vec2.end(), std::back_inserter(vec1));
RB>vec1.insert(vec1.end(), vec2.begin(), vec2.end());
KP>>


Не спорю, но copy тоже работает.
Re[4]: намудрил...
От: rus blood Россия  
Дата: 25.06.04 10:08
Оценка:
Здравствуйте, Korikoff Pavel, Вы писали:

KP>>>

KP>>>//std::copy(vec2.begin(), vec2.end(), std::back_inserter(vec1));
RB>>vec1.insert(vec1.end(), vec2.begin(), vec2.end());
KP>>>


KP>Не спорю, но copy тоже работает.

Но медленнее...
Имею скафандр — готов путешествовать!
Re[3]: соединение 2-х массивов
От: NoFate Россия  
Дата: 27.06.04 12:22
Оценка:
Здравствуйте, emergenter, Вы писали:

E>А какая библиотека при этом используется???

STL, естественно

E>Как обращаться к жлементам массива???

Можно так же, как всегда, можно поиздеваться над итераторами.
... << Rsdn@Home 1.1.4 beta 1>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.