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

STL контейнер set, вставка элементов

11.06.2013, 14:41. Показов 5678. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые админы.Снова прошу о помощи. Необходимо в множество bred,начиная с позиции n, вставить элементы из множества new_bred.
Кликните здесь для просмотра всего текста
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <set>
using namespace std;
 
set <int> enter_set(int n, int f);
void show_set(set <int> s);
 
// заполнение контейнера
set <int> enter_set(int n, int f)
{
    set <int> s;
    for(int i=0;i<n;i++,f++)
    {
        s.insert(f+1);
    }
    return s;
}
// функция, осуществляющая вывод содержимого
void show_set(set <int> s)
{
    set <int>::const_iterator pos;
 
    for(pos = s.begin();pos!=s.end();pos++)
        cout << *pos << "\t";
}
// изменение контейнера
set <int> change_set(set <int> s)
{
    set <int>::const_iterator pos;
    for(pos = s.begin();pos!=s.end();)
    {
        int buf = *pos;
 
        if(buf%2 == 0)
        {
            s.erase(pos++);
 
        }
        else
            ++pos;
    }
    return s;
}
// начала писать функцию вставки
set <int> ins_pos(set <int> s,set <int> s1,int n)
{
    set <int>::const_iterator pos, pos1;
    for(pos = s.begin();)
    
}
int main(){
 
    int j1=0;
    int f1=0;
    set<int> bred;
 
// заполнение контейнера
    cout << "Enter size set1: ";
    cin >> j1;
    cout << endl;
 
    bred = enter_set(j1,f1); // заполняем кол-ом j, первые элемент равен f1+1
 
//вывод содержимого
    show_set(bred);
    cout << endl;
 
//изменение контейнера,удаление четных эелементов
    set <int> ch_bred;
    ch_bred=change_set(bred);
    show_set(ch_bred);
    cout << endl;
    cout << endl;
 
// создаем новый контейнер, заполняем его элементами типа int
    set <int> new_bred;
    int f2 = 100,j2=0;
    cout << "Enter size set2: ";
    cin >> j2;
    cout << endl;
    new_bred = enter_set(j2,f2);
    show_set(new_bred);
    
    
    
    cout<<endl;
 
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2013, 14:41
Ответы с готовыми решениями:

STL, контейнер set
Помогите, пожалуйста. Задание состоит вот в чем: даны названия городов, и для них перечислены...

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
Есть код №1. Он выводить на экран позицию нужного мне слова (только если в середине 1 слово а не 2...

Используя STL контейнер set заполнить массив
Задание 2. Данную задачу решить не используя метод sort, а используя STL контейнер: set. Заполнить...

Сохранить порядок следования элементов используя лишь контейнер <set>
Здравствуйте! Знаю, что при помощи множеств можно исключить повторные вхождения элементов (массива,...

13
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
11.06.2013, 14:43 2
std::copy уже не катит?
0
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
11.06.2013, 14:47  [ТС] 3
Цитата Сообщение от oxotnik Посмотреть сообщение
std::copy уже не катит?
А можно хотя бы примерный код. А то у меня временами ступор с циклами возникает. Какие именно циклы вложить один в одного. Хотя бы левый пример.Я сама под свой напишу.



И еще. Я не нашла при работе с set такой функции.
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
11.06.2013, 14:50 4
Цитата Сообщение от Дев4енка Посмотреть сообщение
А можно хотя бы примерный код.
http://www.cplusplus.com/reference/algorithm/copy/
Цитата Сообщение от Дев4енка Посмотреть сообщение
И еще. Я не нашла при работе с set такой функции.
она не в самом сете реализована.
1
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
11.06.2013, 16:02  [ТС] 5
Цитата Сообщение от oxotnik Посмотреть сообщение
http://www.cplusplus.com/reference/algorithm/copy/

она не в самом сете реализована.
Разобралась немного. В сет врядли можно в определенную позицию вставить. Можно в конец. А оно автоматически отсортирует.
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.06.2013, 17:17 6
Дев4енка, при вставке в set не имеет значение, какую начальную позицию ты предполагаешь для элемента, все равно оно же вставит именно туда, куда нужно, чтобы последовательность была отсортированной
0
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
11.06.2013, 18:45  [ТС] 7
Цитата Сообщение от MrGluck Посмотреть сообщение
Дев4енка, при вставке в set не имеет значение, какую начальную позицию ты предполагаешь для элемента, все равно оно же вставит именно туда, куда нужно, чтобы последовательность была отсортированной
Вы правы. У меня следующая проблема. Попыталась реализовать функцию вставки с помощью copy.Но выдает ошибку(ссылаясь конкретно на описание данной функции типа:
C++
1
2
3
4
5
6
7
8
9
10
// TEMPLATE FUNCTION copy
template<class _InIt,
    class _OutIt> inline
    _OutIt _Copy_impl(_InIt _First, _InIt _Last,
        _OutIt _Dest, _Nonscalar_ptr_iterator_tag)
    {   // copy [_First, _Last) to [_Dest, ...), arbitrary iterators
    for (; _First != _Last; ++_Dest, ++_First)
        *_Dest = *_First;
    return (_Dest);
    }
якобы невозможно присваивать значения переменной, которая объявлена как константа. Это о переменной _Dest.
Вот кусок моего кода с функцией:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set <int> ins_pos(set <int> s,set <int> s1)
{
    set <int>::const_iterator pos, pos1, pos1_e;
    int num1, num2, max;
    num1 = s.size();
    num2 = s1.size();
    max = num1 + num2;
    pos = s.end();
    pos++;
    pos1 = s1.begin();
    pos1_e = s1.end();
    copy(pos1,pos1_e,pos);
    return s;
}
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.06.2013, 19:04 8
Цитата Сообщение от Дев4енка Посмотреть сообщение
copy(pos1,pos1_e,pos);
правильно, pos - const_iterator, а copy запихивает в контейнер, на который ссылается итератор pos, диапазон значений, тем самым модифицируя его. Для этого надо иметь обычный итератор, вот он и ругается.
0
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
11.06.2013, 19:11  [ТС] 9
Цитата Сообщение от MrGluck Посмотреть сообщение
правильно, pos - const_iterator, а copy запихивает в контейнер, на который ссылается итератор pos, диапазон значений, тем самым модифицируя его. Для этого надо иметь обычный итератор, вот он и ругается.
Но разве в set предусмотрена работа не с константным указателем? Как мне изменить данную часть кода?


Попробовала объявить след образом:
C++
1
set <int>::iterator pos;
Та же ошибка.
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.06.2013, 20:00 10
Цитата Сообщение от Дев4енка Посмотреть сообщение
pos = s.end();
вы вставляете не в то место. надо в s.begin()

Цитата Сообщение от Дев4енка Посмотреть сообщение
Та же ошибка.
выкладывайте исправленный код и текст ошибки
0
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
11.06.2013, 20:06  [ТС] 11
Цитата Сообщение от MrGluck Посмотреть сообщение
вы вставляете не в то место. надо в s.begin()


выкладывайте исправленный код и текст ошибки
Пробовала уже и в end. Безрезультатно. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
set <int> ins_pos(set <int> s,set <int> s1)
{
    set <int>::iterator pos1, pos1_e;
    set <int>::iterator pos;
    int num1, num2;
    num1 = s.size();
    num2 = s1.size();
    pos = s.end();
    pos1 = s1.begin();
    pos1_e = s1.end();
    copy(pos1,pos1_e,pos);
    return s;
}
Ошибка:
Код
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility:2144: ошибка: C3892: _Dest: невозможно присваивать значения переменной, которая объявлена как константа
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(2165): см. ссылку на создание экземпляров функции шаблон при компиляции "_OutIt std::_Copy_impl<std::_Tree_unchecked_const_iterator<_Mytree>,_OutIt>(_InIt,_InIt,_OutIt,std::_Nonscalar_ptr_iterator_tag)"
with
[
    _OutIt=std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>,
    _Mytree=std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>,
    _InIt=std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(2186): см. ссылку на создание экземпляров функции шаблон при компиляции "_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt)"
with
[
    _OutIt=std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>,
    _InIt=std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(2206): см. ссылку на создание экземпляров функции шаблон при компиляции "_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::input_iterator_tag,std::output_iterator_tag)"
with
[
    _OutIt=std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>,
    _InIt=std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(2227): см. ссылку на создание экземпляров функции шаблон при компиляции "_OutIt std::_Copy_impl<std::_Tree_unchecked_const_iterator<_Mytree>,_OutIt>(_InIt,_InIt,_OutIt,std::tr1::true_type)"
with
[
    _OutIt=std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>,
    _Mytree=std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>,
    _InIt=std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>
]
.\main.cpp(57): см. ссылку на создание экземпляров функции шаблон при компиляции "_OutIt std::copy<std::_Tree_const_iterator<_Mytree>,std::_Tree_const_iterator<_Mytree>>(_InIt,_InIt,_OutIt)"
with
[
    _OutIt=std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>,
    _Mytree=std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>,
    _InIt=std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<int,std::less<int>,std::allocator<int>,false>>>
]
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.06.2013, 05:51 12
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <set>
 
int main()
{
    std::set<int> s1 = {1, 3, 5}, s2 = {2, 4, 5};
    s2.insert(s1.begin(), s1.end());
    for (auto x : s2)
        std::cout << x << " ";
}
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <set>
#include <algorithm>
 
int main()
{
    std::set<int> s1 = {1, 3, 5}, s2 = {2, 4, 5};
    std::copy(s1.begin(), s1.end(), std::inserter(s2, s2.begin()) );
    for (auto x : s2)
        std::cout << x << " ";
}
1
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
12.06.2013, 10:20  [ТС] 13
Цитата Сообщение от MrGluck Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <set>
 
int main()
{
    std::set<int> s1 = {1, 3, 5}, s2 = {2, 4, 5};
    s2.insert(s1.begin(), s1.end());
    for (auto x : s2)
        std::cout << x << " ";
}
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <set>
#include <algorithm>
 
int main()
{
    std::set<int> s1 = {1, 3, 5}, s2 = {2, 4, 5};
    std::copy(s1.begin(), s1.end(), std::inserter(s2, s2.begin()) );
    for (auto x : s2)
        std::cout << x << " ";
}

Спасибо. Позже гляну, или оно у меня компилится. Я нашла функцию set_union и объединила с помощью нее. Но вариант с copy мне больше нравится.
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.06.2013, 15:12 14
Дев4енка, предвидя ошибки:
Для вывода результатов я использовал for-цикл по коллекции, вы можете изменить его на любой свой, мне просто так удобнее и быстрее, но является часть С++11, который VS10 не поддерживает.
1
12.06.2013, 15:12
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2013, 15:12
Помогаю со студенческими работами здесь

STL: контейнеры. Произвольная вставка элементов
Доброго времени суток! Можно ли вставить элемент в контейнер STL (не важно какой) в произвольное...

Контейнер set
Два множества, элементами которого являются строчные буквы латинского алфавита, представлены с...

Контейнер set
Есть текст на агл. языке. Используя контейнер set нужно упорядочить слова этого текста в алфавитном...

контейнер set
Создать контейнер set, ввести в него 3 числа. Создать метод по вычислении наибольшего из этих чисел...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru