Здравствуйте, emergenter, Вы писали:
E>Подскажите пожалуйста! E>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];
E>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?
В этом решении Вы заранее разделили массив на пополам по 20 элементов это понятно!!
А что делать если заранее размеры не известны! Получили 2 массива по 20 элементов и не хочется заводить выделять новый массив и присваивать ему эти элементы (кажется что это не рациональное решение). Может как то можно по другому?!
Здравствуйте, emergenter, Вы писали:
E>В этом решении Вы заранее разделили массив на пополам по 20 элементов это понятно!! E>А что делать если заранее размеры не известны! Получили 2 массива по 20 элементов и не хочется заводить выделять новый массив и присваивать ему эти элементы (кажется что это не рациональное решение). Может как то можно по другому?!
Тогда можно посмотреть в сторону HeapReAlloc (и других подобных).
Конечно же, выделять память под массивы необходимо будет HeapAlloc.
Здравствуйте, emergenter, Вы писали:
E>Подскажите пожалуйста! E>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];
E>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?
Здравствуйте, emergenter, Вы писали:
E>Затрагивать API не очень хотелось!! Просто советский С++!!!
Ответ на первый вопрос в теме простой — никак.
Ежели хотите динамические структуры, пользуйте динамические методы. Не хотите API — правильно, пользуйте "простой советский" memcpy или memmove, они сами обратятся к API, эти функции ещё от C библиотек перекочевали. Лучшие повара С++ рекомендуют std::vector.
Здравствуйте, 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); // Сдвинем указатель на начало нашего массива
Здравствуйте, 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);
// умножим все элементы на 2for (int i=0; i<40; i++)
mas40[i] *= 2;
// распечатаем результатfor (int i=0; i<40; i++)
cerr << mas40[i] << endl;
}
Извращения на кодом предлагаются пытливому читателю в качестве упражнения ;)
Здравствуйте, Korikoff Pavel, Вы писали:
KP>Здравствуйте, emergenter, Вы писали:
E>>Подскажите пожалуйста! E>>Есть 2 ьассива типа unsigned int mas1[20] и mas2[20];
E>>Можно ли как нибудь быстрее сделать чтобы элементы массива mas2 дописать к концу массива mas1 т.е. чтобы массив mas1 был уже 40 элементов?
KP>И вообще, делать это лучше std::vector:
KP>
Здравствуйте, emergenter, Вы писали:
E>А какая библиотека при этом используется???
STL, естественно
E>Как обращаться к жлементам массива???
Можно так же, как всегда, можно поиздеваться над итераторами.