16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|||||||||||
1 | |||||||||||
Объединение двух контейнеров21.10.2013, 17:04. Показов 3932. Ответов 16
Метки нет (Все метки)
функция программы, которая производит логическое объединение двух контейнеров. дело в том, что переменная check инициализируется абы как - если вдруг первая переменная контейнера А встречается в В, то там есть нормальная переменная. Если нет, то проверка
Кликните здесь для просмотра всего текста
0
|
21.10.2013, 17:04 | |
Ответы с готовыми решениями:
16
Не осуществляется объединение двух контейнеров Объединение контейнеров deque Взаимодействие двух контейнеров объектов Использование двух контейнеров из STL |
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
21.10.2013, 17:23 | 2 |
А покажи использование, а? Ибо у меня все работает. тут кстати ты опечатался:
++temp не там стоит, где должно. Да, и куча пробелов в самых неподходящий места, этим не злоупотребляй(set <int> & => set<int>&, b.begin () => b.begin())). А так вполне себе приятно читать)
1
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
||||||
21.10.2013, 17:31 [ТС] | 3 | |||||
а вообще, перед этим написал, что vector <int> итератор не приращиваемый! что за итератор надо для него выбрать тогда из файла iterator? Спасибо, а о каких пробелах идёт речь? О тех, что перед операторами или внутри скобок? Если первые, то это Dev-C++ сам ставит вместо табуляции. А внутри скобок постарался сделать код читабельнее.
Полный код: Кликните здесь для просмотра всего текста
0
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
21.10.2013, 17:38 [ТС] | 4 |
++temp; перенес внутрь блока if.вот кстати ошибочка
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
21.10.2013, 17:44 | 5 |
Каково полное задание?
Мне кажется тут нужен стандартный алгоритм set_symmetric_difference Добавлено через 5 минут А на какую строку ругается? В коде под катом нет 101.
0
|
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
||||||
21.10.2013, 19:53 | 6 | |||||
101 это в stl'евском файле..
Добавлено через 9 минут Дело в том, что, судя по показаниям дебагера массив b у тебя туда передавался пустой. temp стоял вне цикла, и таким образом в любом случае он пытался выполнить операцию ++, что в силу пустоты b невозможно. Мне вообще сдается, что просто необходимо вставить проверки ну пустоту (если просто занесение ++temp не поможет). Я думаю, что читабельность от пробелов повышается в таких ситуациях: В следующих же случаях это только распыляет внимание: Так ведь намного лучше:
1
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
21.10.2013, 19:55 | 7 |
monolit, так проблема решилась переносом ++temp внутрь цикла или нет? и если нет, то откуда стреляет ассерт?
0
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|||||||||||||||||||||
22.10.2013, 02:47 [ТС] | 8 | ||||||||||||||||||||
MrGluck, программа производит логическое объединение двух множеств
Добавлено через 6 минут так ведь temp - итератор массива A
Добавлено через 11 минут его не надо никуда переносить, посмотрите выше почему.
программа впадает в ступор в
0
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
22.10.2013, 03:26 [ТС] | 10 |
не знаком с таким, посмотрю, но эту программу точно нужно допилить с этими компонентами, нужно понять в чём дело.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
22.10.2013, 03:29 | 11 |
tramp_1-3, set только без сортировки. Получается обычный контейнер, содержащий уникальные по ключу элементы.
Добавлено через 47 секунд Требует С++11. Если хочется иметь уникальные элементы, но подходящего компилятора под рукой нет, то можно и set использовать для данных целей.
0
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
22.10.2013, 03:32 [ТС] | 12 |
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
22.10.2013, 03:44 | 13 | |||||
Добавлено через 1 минуту Я слабо понимаю суть функции unite. Или это попытка самописного std::set_intersaction или std::set_union. Зависит от знака после функции std::find в условиях
1
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
22.10.2013, 09:44 [ТС] | 14 |
Два множества необходимо объединить в одно так, чтобы в результате в нем были только те элементы, которые есть в обоих. Конъюнкция.
Добавлено через 2 минуты MrGluck, работает как надо, осталось мне понять, где ж я просчитался.. спасибо огромное.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
22.10.2013, 11:46 | 15 |
всего лишь в месте инструкции ++temp, как вам уже указывал monolit во втором сообщении. Я лишь занес все в циклы для наглядности. Я бы рекомендовал также присмотреться к некой оптимизации:
сначала вектора сортируются по возрастанию, а дальше идет проход в один цикл со сравнением двух конечных элементов векторов. Некий аналог http://www.cplusplus.com/refer... ersection/ Хотя и данный алгоритм вполне неплох. Насчет лишних пробелов я с monolit полностью согласен
1
|
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
22.10.2013, 13:49 | 16 |
Хоть и с опозданием, и вопрос уже решен, но все же. Авось пригодится)
Если брать оба непустых массива, то в ступор не впадает. Специально проверил. Если пустой - ошибка с ++temp, что я и написал Для этого и проверяют на !=****.end(). Если посмотреть в исходники stl итератора, то там никаких проверок нет, и ++ выполнится, если ты ее вызвал, есть ли у тебя что-то дальше, или нет. Если вызвал на end'е, сам виноват, получается. Справится (справлялось). Но... ++temp все портило...
1
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
||||||
22.10.2013, 14:59 [ТС] | 17 | |||||
блин, ну буду аккуратней тогда с итераторами и пустыми контейнерами.
так жеш ++temp внутри цикла это, после проверки while (temp != a.end())
блин, нашёл наконец-таки ошибку! нижний ++temp перенес в скобку ближайшую и всё норм. как всегда, мелочная херня. спасибо за участие. Добавлено через 19 минут monolit, MrGluck, оптимизировал как мог, вот работает как надо, всем спасибо огромное. и да, пробелы тоже поправил.
0
|
22.10.2013, 14:59 | |
22.10.2013, 14:59 | |
Помогаю со студенческими работами здесь
17
Разработать программу с использованием двух последовательных контейнеров STL и трех методов Напечатать все буквы, входящие в текст не менее двух раз с использованием контейнеров map и multimap Определить объединение из двух полей Первое поле - массив из двух байт, второе - слово Определить объединение из двух полей. Первое поле - массив из двух байт, второе - слово Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |