Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mysylega
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
#1

Новый масив из уникальных элементов другого массива - C++

26.11.2012, 03:09. Просмотров 770. Ответов 10
Метки нет (Все метки)

Здравствуйте, помогите сделать функцию которая генерирует новый массив из элементов, которые не повторяются в другом массиву. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2012, 03:09     Новый масив из уникальных элементов другого массива
Посмотрите здесь:

Найти сумму уникальных элементов массива - C++
1. Задати масив цілих чисел довжиною згідно варіанту. 2. Елементи масиву задати випадковим чином в межах заданих діапазонів* . 3....

Подсчёт количества уникальных элементов массива - C++
Задается количество элементов массива не более 100. Элементами массива будут целые числа от -100 то 100. Если введено количество меньше 1,...

Функция для нахождения уникальных элементов массива - C++
Есть функция на JS, которой передается двумерный символьный массив. Она возвращает символы без повторений: function getLetters(a) { ...

Сформировать массив из положительных элементов одного массива и отрицательных элементов другого - C++
Даны массив А и массив В, в каждом по 10 элементов. Сформировать новый массив, состоящий из положительных элементов массива А и...

Сформировать массив из положительных элементов одного массива и отрицательных элементов другого - C++
Даны массив А и массив В, в каждом по 10 элементов. Сформировать новый массив, состоящий из положительных элементов массива А и...

Запись элементов массива структурного типа.Из старого массива- в новый - C++
Здравствуйте.Возможно, в названии темы не совсем понятно "чего я хочу", поэтому напишу задание: "1.Сформировать динамический массив...

Из нечётных чисел заданного массива создать новый массив и посчитать количество элементов нового массива - C++
Дано целочисленный одномерный массив А , состоящий из 12 элементов . Создать массив С , состоящий из нечетных чисел массива А , посчитать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
6946 / 4117 / 581
Регистрация: 29.11.2010
Сообщений: 10,921
26.11.2012, 03:17     Новый масив из уникальных элементов другого массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstddef>
#include <algorithm>
#include <iterator>
#include <random>
#include <ctime>
 
int main ()
{
    std::mt19937 gen (time (0));
    std::uniform_int_distribution<int> uid (0, 20);
    const std::size_t N = 25;
    std::vector<int> V(N), A(N);
    std::generate (V.begin(), V.end(), [&uid, &gen] { return uid(gen); } );
    std::copy(V.begin(), V.end(), std::ostream_iterator<int> (std::cout, " ") );
    std::cout<< std::endl;
    std::sort(V.begin(), V.end());
    auto it = std::unique_copy(V.begin(), V.end(), A.begin() );
    A.resize(it - A.begin() );
    std::copy(A.begin(), A.end(), std::ostream_iterator<int> (std::cout, " ") );
    std::cout<< std::endl;
    return 0;
}
Добавлено через 1 минуту
Еще вариант с мапом:
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
#include <iostream>
#include <cstddef>
#include <vector>
#include <algorithm>
#include <iterator>
#include <random>
#include <ctime>
#include <map>
 
int main ()
{
    std::mt19937 gen (time (0));
    std::uniform_int_distribution<int> uid (0, 20);
    const std::size_t N = 25;
    std::vector<int> V(N), A;
    std::generate (V.begin(), V.end(), [&uid, &gen] { return uid(gen); } );
    std::copy(V.begin(), V.end(), std::ostream_iterator<int> (std::cout, " ") );
    std::cout<< std::endl;
    std::map<int, int> m;
    for (auto &x: V)
        ++m[x];
    for (auto &x: m)
        if (x.second == 1) A.push_back(x.first);
    std::copy(A.begin(), A.end(), std::ostream_iterator<int> (std::cout, " ") );
    std::cout<< std::endl;
    return 0;
}
Mysylega
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
26.11.2012, 03:18  [ТС]     Новый масив из уникальных элементов другого массива #3
MrGluck, извините, а нет функции без использования std ?
MrGluck
Модератор
Эксперт CЭксперт С++
6946 / 4117 / 581
Регистрация: 29.11.2010
Сообщений: 10,921
26.11.2012, 03:21     Новый масив из уникальных элементов другого массива #4
Цитата Сообщение от Mysylega Посмотреть сообщение
MrGluck, извините, а нет функции без использования std ?
Ну, как минимум, без std::cout я не обойдусь.
Могу все оформить без STL, думаю это вам надо.
Mysylega
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
26.11.2012, 03:24  [ТС]     Новый масив из уникальных элементов другого массива #5
MrGluck, я делаю сейчас программу на ООП, у меня все готово, только осталось добавить в класс функцию которую я написал в первом сообщение, к сожалению я не знаю, что означает STL, вот моя функция генерации массива:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void gener::creat(int n,int t1,int t2)
{if (p) delete []p;
 p=new int [n];
 size=n;
 if (!p) {ShowMessage("Error");
          exit(1);}
 randomize();
 if (t1>t2) {ShowMessage("Error");
             return;}
 for(int i=0;i<size;i++)
   p[i]=random(t2+1)-random(abs(t1+1));
}
MrGluck
Модератор
Эксперт CЭксперт С++
6946 / 4117 / 581
Регистрация: 29.11.2010
Сообщений: 10,921
26.11.2012, 03:35     Новый масив из уникальных элементов другого массива #6
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
int count_unique(int *from, const int N);
void copy_unique(int *from, const int N, int *to);
 
int main()
{
    const int N = 25;
    std::srand (time (0));
    int A[N], *B; // B is dynamic array because we don't know it's size
    for (int i=0; i < N; i++)
    {
        A[i] = rand() % 20;
        std::cout<< A[i]<< " ";
    }
    std::cout<< std::endl;
 
    int new_size = count_unique(A, N);
    B = new int[ new_size ];
    copy_unique(A, N, B);
 
    for (int i=0; i < new_size; i++)
        std::cout<< B[i]<< " ";
    std::cout<< std::endl;
    delete []B;
    return 0;
}
 
int count_unique(int *from, const int N)
{
    int new_size = 0;
    for (int i=0; i < N; i++)
    {
        int counter = 0;
        for (int j=0; j < N; j++)
            if (from[i] == from[j])
                counter++;
        if (counter == 1)
            new_size++;
    }
    return new_size;
}
 
void copy_unique(int *from, const int N, int *to)
{
    int index = 0;
    for (int i=0; i < N; i++)
    {
        int counter = 0;
        for (int j=0; j < N; j++)
            if (from[i] == from[j])
                counter++;
        if (counter == 1)
            to[index++] = from[i];
    }
}
Mysylega
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
26.11.2012, 03:39  [ТС]     Новый масив из уникальных элементов другого массива #7
MrGluck, спасибо, но только может я не так понял, а разве эта программа не будет копировать в новый массив все элементы из первого, только удаляя дубли ?
MrGluck
Модератор
Эксперт CЭксперт С++
6946 / 4117 / 581
Регистрация: 29.11.2010
Сообщений: 10,921
26.11.2012, 03:40     Новый масив из уникальных элементов другого массива #8
Цитата Сообщение от Mysylega Посмотреть сообщение
MrGluck, спасибо, но только может я не так понял, а разве эта программа не будет копировать в новый массив все элементы из первого, только удаляя дубли ?
Да, именно.
Mysylega
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
26.11.2012, 03:42  [ТС]     Новый масив из уникальных элементов другого массива #9
Цитата Сообщение от MrGluck Посмотреть сообщение
Да, именно.
Ясно, спасибо, хотя мне нужно, элементы, которые повторяются вообще не брать, но думаю переделать вашу программу под меня поменяв условие будет не сложно, еще раз спасибо.
MrGluck
Модератор
Эксперт CЭксперт С++
6946 / 4117 / 581
Регистрация: 29.11.2010
Сообщений: 10,921
26.11.2012, 03:45     Новый масив из уникальных элементов другого массива #10
Цитата Сообщение от Mysylega Посмотреть сообщение
Ясно, спасибо, хотя мне нужно, элементы, которые повторяются вообще не брать, но думаю переделать вашу программу под меня поменяв условие будет не сложно, еще раз спасибо.
Стоп, я не так прочел. Да, оно копирует в новый массив лишь элементы, которые случаются не более 1 раза.

Добавлено через 1 минуту
Советовал бы прочитать про std::vector, тут неприятный вынужденный копирайт происходит, т.к. мы не знаем сколько памяти надо выделить под новый массив.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 04:05     Новый масив из уникальных элементов другого массива
Еще ссылки по теме:

Создать массив состоящий из положительных элементов другого массива - C++
Массив А вводится с клавиатуры. Сформировать новый массив В, состоящий из положительных элементов массива А. Размер произвольный

Заполнить массив суммой двух элементов другого массива - C++
Добрый день, не могу решить такую задачу: &quot;Объявить массив 5х10 и 5х5. Первый массив заполняется случайными числами,а второй заполняется по...

Сформировать новый массив из элементов массива - C++
сформировать новый массив из элементов массива М(25), встречающихся в этом массиве только один раз. на Си. заранее спасибо!

Перенос двузначных элементов массива в новый - C++
всем привет!у меня есть прога которая автоматом заполняет массив и сортирует его по возрастанию,как сделать чтоб из этого массива все...

Получить массив из элементов другого массива, которые кратны двум - C++
Привет всем! Помогите пожалуйста составить Программу алгоритмов с использованием динамических массивов -само задание вот ( Задан массив...


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

Или воспользуйтесь поиском по форуму:
Mysylega
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 12
26.11.2012, 04:05  [ТС]     Новый масив из уникальных элементов другого массива #11
Вот сделал функцию, только не могу понять, почему она работает не правильно:
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
void nm::new_mas(void)
{
size2=0;
int n=size;
if (p1) {delete []p1;}
p1=new int [size];
if (!p1) {ShowMessage("Error");
          exit(1);
 
}
 for(int i=0;i<size;i++){
 int k=0;
 for(int j=0;j<size;j++)
  if (p[i] == p[j]) 
   k++;
  
if (k == 1)
{
p1[size2]=p[i];
size2++;
}
 
 }
 }
Yandex
Объявления
26.11.2012, 04:05     Новый масив из уникальных элементов другого массива
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru