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

Собрать элементы массива A, которые не включаются в массив B

12.03.2019, 23:13. Показов 4739. Ответов 7

Author24 — интернет-сервис помощи студентам
Тема: Указатели.

Понимаю, что сейчас люди будут говорить о том, что не читаешь другие темы, но похожей не нашёл, только потому, что мне нужно решить без new .
В этом и заключается вся сложность. Есть понимание о том, как проще и быстрее, но вот без new не имею представления.
Так что прошу не кидаться камнями. Ибо в Интернете достаточно ответов о ток, как решить, но вот нужного нет.

Даны два массива: А[M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B, без повторений.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2019, 23:13
Ответы с готовыми решениями:

Создать третий массив, в котором собрать элементы массива A, которые не включаются в массив B
4. Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать третий массив...

Необходимо собрать в третьем массиве, элементы массива А, которые не включаются в массив B
Необходимо собрать в третьем массиве, элементы массива А, которые не включаются в массив B....

Создать третий массив, в котором нужно собрать элементы массива A, которые не включаются в массив B
Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально...

Собрать в новом динамическом массиве элементы массива A, которые не включаются в массив B, без повторений
Я понимаю что может задам глупый вопрос ,но мне нужна ваша помощь. Вот условие задачи ://Даны...

7
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
13.03.2019, 00:09 2
Если нельзя new то остается либо malloc либо std::vector.
1
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
13.03.2019, 00:40  [ТС] 3
Нет, такое тоже запрещено. Не проходили на данной стадии.
Преподаватель вот такой вариант предложил

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<iostream>
 
typedef int buf_t[1024];
 
typedef buf_t* bufarr_t[1024];
 
void allocate(bufarr_t* bufarr, int m, int n, int q, int i)
 
{
 
buf_t buffer = { 0 };
 
(*bufarr)[i] = &buffer;
 
if (m <= 0 && n <= 0 && q <= 0)
 
{
 
(*bufarr)[i] = NULL;
 
return;
 
}
 
else if (m <= 0 && n <= 0) {
 
return allocate(bufarr, 0, 0, q - 1024, i + 1);
 
}
 
else if (m <= 0) {
 
return allocate(bufarr, 0, n-1024, q, i + 1);
 
}
 
else {
 
return allocate(bufarr, m-1024, n, q, i + 1);
 
}
 
}
 
int main()
 
{
 
bufarr_t bufarr = { nullptr };
 
int m = 0, n = 0, q = 0;
 
std::cin >> m;
 
std::cin >> n;
 
q = m + n;
 
allocate(&bufarr, m, n, q, 0);
 
system("pause");
 
return 0;
 
}
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.03.2019, 01:02 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
 
int main(int argc, char* argv[])
{
    int A[]={1,2,3,4,5,6},
    szA=sizeof(A)/sizeof(*A),
    B[]={25,2,33,44,5,6},
    szB=sizeof(B)/sizeof(*B);
 
set<int> A_set(A, A+szA), B_set(B, B+szB), C_set;  
set_difference(A_set.begin(), A_set.end(),
                    B_set.begin(), B_set.end(), inserter(C_set, C_set.begin()));
ostream_iterator<int> osit(cout, " ");
copy(C_set.begin(), C_set.end(), osit);
 
cout<<endl;
cin.get();
return 0;
}
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
13.03.2019, 01:29 5
Цитата Сообщение от Blacit Посмотреть сообщение
Нет, такое тоже запрещено. Не проходили на данной стадии.
Тогда, замените malloc на notMalloc.
C++
1
2
3
4
5
6
7
8
9
10
11
void*notMalloc(std::size_t size)
{
    const std::size_t storageSize=1<<20;
    static unsigned char storage[storageSize];
    static unsigned char*freeStorage=storage;
    static unsigned char*const endStorage=storage+storageSize;
 
    return freeStorage+size<=endStorage?
                (freeStorage+=size)-size:
                nullptr;
}
1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
13.03.2019, 02:01 6
Цитата Сообщение от Blacit Посмотреть сообщение
нужно решить без new
Если вы имеете в виду что вам нужно реализовать свою кучу на который вы будете выделять память под выполняющиеся функции, тогда вам надо копать в сторону https://en.cppreference.com/w/cpp/memory/allocator
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
13.03.2019, 03:33 7
Цитата Сообщение от outoftime Посмотреть сообщение
Если вы имеете в виду что вам нужно реализовать свою кучу на который вы будете выделять память под выполняющиеся функции, тогда вам надо копать в сторону https://en.cppreference.com/w/cpp/memory/allocator
Скорее, в сторону Buddy memory allocation и Искусства Программирования Дональда Кнута. А копать в сторону std::allocator не надо, по крайней мере пока он не перестанет крашится при попытке удалить полиморфный объект Child через Parent* указатель (и да, через new/delete операции в коде ниже работают прекрасно).
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
25
26
27
28
29
30
31
32
class FirstParent
{
public:
    virtual~FirstParent(){}
    int x;
};
 
class SecondParent
{
public:
    virtual~SecondParent(){}
    int y;
};
 
class Child:public SecondParent,public FirstParent
{
public:
};
 
int main()
{
    //аллокатор базового типа FirstParent, который не умеет создавать потомков FirstParent
    std::allocator<FirstParent> baseAllocator;
    //аллокатор умеющий делать потомка Child
    std::allocator<Child> childAllocator(baseAllocator);
    //делаем ребеночка и сохраняем в указатель на БАЗОВЫЙ класс. Потому что полиморфизм
    FirstParent*child=childAllocator.allocate(1);
    //В childAllocator этот указатель не сунешь, значит суем в baseAllocator
    //Опс, программа крашится
    baseAllocator.deallocate(child,1);
    return 0;
}
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
13.03.2019, 14:42 8
Renji, кажись я видел несколько лет тому назад презентацию проэкта от одного из русских разрабов из яндекса, который пилил БД на "матрасе" (так назвал стуктуру данных), который похожим образом делил память, но из-за небольших размеров позволял полностью использовать возможности кеша процессора. Давно это было, так сразу больше и не вспомню.

Добавлено через 8 минут
Renji, https://github.com/evanw/buddy-malloc
0
13.03.2019, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2019, 14:42
Помогаю со студенческими работами здесь

Собрать элементы массива А, которые не включаются в В
Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать элементы...

Указатель. Создать массив, в котором собраны элементы массива A, которые не включаются в массив B, без повторений.
Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально...

Создать новый массив С, в котором элементы массива A, которые не включаются в B
Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать:Элементы...

Собрать элементы массива A, которые не встречаются в B
Даны два массива: А и B . Образовать третий массив минимального возможного размера, в котором...


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

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