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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
Виктуся
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 17
#1

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения (класс-контейнер вектор) - C++

11.05.2011, 10:54. Просмотров 3002. Ответов 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
#include <iostream>
using namespace std;
 
int main()
{
    int n;
    cout<<"n=";
    cin>>n;
    int a[n];
    for (int i=0;i<n;i++)
        cin>>a[i];
int i=0;
while(i<n-1)
{
    int g;
    g=i+1;
    while (g<n)
        if (a[i]==a[g])
            {
                 for (int j=g; j<n-1; j++)
                     a[j]=a[j+1];
                 n--;
            }
    else g++;
    i++;
}
     for (int i=0;i<n;i++)
             cout<<a[i]<<"\t";
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 10:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить из массива повторяющиеся элементы, оставив только их первые вхождения (класс-контейнер вектор) (C++):

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения - C++
Как мне удалять повторяющийся элемент? #include &lt;iostream&gt; using namespace std; int main () {float a; int n,k=0; cout&lt;&lt;&quot;n=&quot;;...

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения - C++
Помогите, зачёт пишу

Одномерные массивы, удалить все повторяющиеся элементы, оставив только первые вхождения - C++
Задача на C++: из заданного массива удалить все повторяющиеся элементы, оставив только их первые вхождения. Вот моя программа, помогите...

Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения - C++
Создать очередь, содержащую слова. Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения. Например, если...

Удалить из строки все повторяющиеся буквы, оставив только их первые вхождения - C++
2.Даны строки, содержащие латинские буквы. Удалить из строки все повторяю* щиеся буквы, оставив только их первые вхождения.

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

3
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
11.05.2011, 13:23 #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
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
66
#include <iostream>
#include <vector>
#include <iterator>
#include <fstream>
#include <algorithm>
 
typedef std::vector<int>::iterator iveciter;
 
int main(int argc, char* argv[])
{
    std::ifstream ifs;
    std::istream* pis;
    
    std::vector<int> ivec;
 
    if(argc > 2)
    {
    std::cerr << "Usage: " << *argv << " FILE" << std::endl;
    return 1;
    }
    
    if(argc == 1)
    {
    std::cout << "Input integer values (EOF to stop):" << std::endl;
    pis = &std::cin;
    }
    
    else
    {
    ifs.open(argv[1]);
    
    if(!ifs.is_open())
    {
        std::cerr << "Can't open file " << argv[1] << std::endl;
        return 1;
    }
    pis = &ifs;
    }
    
    
    std::copy(std::istream_iterator<int>(*pis),
          std::istream_iterator<int>(),
          std::inserter(ivec, ivec.begin()));
 
    if(argc == 2)
    {
    std::cout << "Initial array:" << std::endl;
    std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, "\n"));
    }
 
    for(iveciter it = ivec.begin(); it != ivec.end(); ++it)
    {
    iveciter it1;
    
    while((it1 = std::find(it + 1, ivec.end(), *it)) != ivec.end())
        ivec.erase(it1);
    }
        
    std::cout << "Array with removed duplicating elements:" << std::endl;
    std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, "\n"));
    
    if(ifs.is_open())
    ifs.close();
    
    return 0;
}
Код
[nameless@desktop cpp]$ cat file.in && ./sample file.in
2 3 2 4 1 2 3 4 5 8 9 8
Initial array:
2
3
2
4
1
2
3
4
5
8
9
8
Array with removed duplicating elements:
2
3
4
1
5
8
9
[nameless@desktop cpp]$
0
Виктуся
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 17
23.05.2011, 18:09  [ТС] #3
А не могли бы объяснить, где что? Заранее спасибо!
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
23.05.2011, 18:34 #4
Сначала идет проверка, переданы ли программе аргументы. Если программе передано больше двух аргументов, то она завершается с ошибкой, если 1 - то ввод производится из файла, чье имя передано в качестве аргумента, если ноль - то ввод производится со стандартного ввода. После этого с помощью алгоритма std::copy происходит ввод, затем мы перебираем контейнер и удаляем повторяющиеся элементы с помощью алгоритмов find и erase (кстати, то же самое можно было бы сделать с помощью алгоритма remove). После чего выводим результат на экран.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2011, 18:34
Привет! Вот еще темы с ответами:

Удалить из массива все одинаковые элементы, оставив их первые вхождения - C++
Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения. Первые вхождения это как?

Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения, то есть в слове должны остаться только различные буквы. - C++
Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения, то есть в слове должны остаться только различные буквы....

Удалить из слова все повторяющиеся буквы, оставив их первые вхождения - C++
Условие:Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения: в слове должны остаться только различные буквы. ...

Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения. - C++
Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения.


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
23.05.2011, 18:34
Ответ Создать тему
Опции темы

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