|
|
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Есть динамический массив, с одинаковыми некоторыми значениями которые нужно выкинуть, а остальные упорядочить по возростанию. Кто может или знает помогите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 18:11 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
массив - это объект какого класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 18:30 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Подскажите как это можно осуществить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 18:36 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
ну просто масив значений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 18:37 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
как вариант можно упорядочить, а потом путем сравнения соседних элементов выкинуть одинаковые. Наверняка это не оптимальный метод и есть нечто более быстрое. загляни сюда http://algolist.manual.ru/ . Наврняка найдешь неплохое решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 19:46 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
пользуйся STL всегда и везде. map<тип значения, твой класс> lst; for(int i = 0; i < 100; i++) lst[val ] = objs; map<тип значения, твой класс>::iterator i_ptr= lst.begin(); for(; i_ptr!= lst.end(); i_ptr++) { тип значения val = (*i_ptr).first; твой класс obj = (*i_ptr).second; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 21:16 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
угу, STL все сделает Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 21:48 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
согласен на все 200% stl это то что нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:30 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Ага, STL, только использовать set и map для данной задачи это все равно, что стрелять из пушки по воробьям. В самом деле: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:54 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Поправка: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 23:58 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
2 vdimas Конструкция вида v.swap(vector<тип>()) не верна, поскольку swap принимает в качестве параметра lvalue (vector &), тогда как vector<int>() - rvalue. Код по очистке вектора должен выглядеть следующим образом: Код: plaintext Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 00:02 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков писал:Конструкция вида v.swap(vector<тип>()) не верна, поскольку swap принимает в качестве параметра lvalue (vector &), тогда как vector<int>() - rvalue. Код по очистке вектора должен выглядеть следующим образом: торопыжка 1. v.swap(vector<тип>()) - эта конструкция инвариантна, т.е. vector<тип>().swap(v); - тоже самое. 2. В lvalue допустимы временные объекты, и я это сплошь и рядом использую в алгоритмах, а так как в любом случае для swap приходится использовать временный объект, то мне фиолетово, с какой стороны его поместить. Спорить не надо, твое заявление меня настолько поразило (ну мало ли, вдруг я действительно ошибся), что я тут же накатал это все, скомпилил и проверил - все гут. :) 3. Ты решил задачу, не посмотрев условие. Прочти еще раз условие и ответь - для чего я взял std::set ??? (кстати, непонятно, зачем Lepsik взял std::map) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 03:36 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
кстати, создай массив на 1000000 элементов и проверь быстродействие своего и моего варианта. Будешь удивлен, особенно, если возьмешь STL от boost. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 03:38 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
2 vdimas Очевидно, Lepsik взял map, чтобы эквивалентные значения объектов выкидывались, а не эквивалентные упорядочивались по возрастанию на этапе вставки. Помимо некоторого "извращения" этот подход содержит потенциальный подвох. Равенство по a == b и эквивалентность, понимаемая в map как !(a < b) && !(b < a) в ряде случаев не одно и то же, хотя для чисел все будет ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 11:12 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
vdimas писал: ... v.swap(vector<тип>); ... Интересно, а зачем нужно делать этот swap ? В чем фишка? Кстати, и не совсем понятно на счет "insert_iterator(s)" - например у меня такая конструкция не работает (STL от VC7.1). Несколько подработанный вариант :) Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 12:27 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Большое всем спасибо щас буду пробывать только одного непонял что такое STL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 13:16 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
2 vdimas >1. v.swap(vector<тип>()) - эта конструкция инвариантна, т.е. vector<тип>().swap(v); - тоже самое. То что это пропускает ваш компилятор не означает, что эта конструкция верна. Ваше утверждение ложно и никакой это не инвариант. Читайте стандарт, в частности 3.10. >2. В lvalue допустимы временные объекты, и я это сплошь и рядом использую в алгоритмах, а так как в любом случае для swap приходится использовать временный объект, то мне фиолетово, с какой стороны его поместить. Спорить не надо, твое заявление меня настолько поразило (ну мало ли, вдруг я действительно ошибся), что я тут же накатал это все, скомпилил и проверил - все гут. :) Ваша бравада закончится, как только вы перейдете на компилятор соответствующий в этом плане стандарту: Код: plaintext 1. 2. 3. 4. 5. 6. Your Comeau C/C++ test results are as follows: Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1 Copyright 1988-2003 Comeau Computing. All rights reserved. MODE:strict errors C++ "ComeauTest.c", line 6: error: initial value of reference to non-const must be an lvalue v.swap(std::vector<int>()); ^ 1 error detected in the compilation of "ComeauTest.c". >3. Ты решил задачу, не посмотрев условие. Прочти еще раз условие и ответь - для чего я взял std::set ??? (кстати, непонятно, зачем Lepsik взял std::map) Если честно, то хрен его знает зачем вы использовали set, хотя условие прочел неоднократно. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 17:03 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Konst писал:Очевидно, Lepsik взял map, чтобы эквивалентные значения объектов выкидывались, а не эквивалентные упорядочивались по возрастанию на этапе вставки. Помимо некоторого "извращения" этот подход содержит потенциальный подвох. Равенство по a == b и эквивалентность, понимаемая в map как !(a < b) && !(b < a) в ряде случаев не одно и то же, хотя для чисел все будет ок. все ясно, но map - это map, я использую set именно для того, что ты описал. а насчет эквивалентности, то для описанной задачи: сортировка (<) и выкинуть лишнее (==) выполнение этих условий подразумевается. 2 Анатолий Широков наверно ты прав, насчет, lvalue. мой компилятор позволяет такие фокусы для агрегированных типов (классы, структуры). насчет твоего способа, вот почему я не взял unique: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. двойной вложенный проход по всему массиву, очевидно, что время работы unique пропорционально квадрату количества элементов массива, что не есть гут, в то время как set использует деревца, и одновременно и сортирует и выкидывает повторы. По количеству операций set приближается к quicksort. Да, в set мы имеем операции с памятью (весьма небыстрые), что тоже не есть гут. Однако, если подобную задачу выполнять постоянно с одним и тем же экземпляром set, и использовать какой-нить вменяемый аллокатор, то выделение памяти произойдет (в большинстве случаев) одноразово, а все остальные разы set сработает быстро, "одним махом" и отсортировав и выкинув лишнее. 2 Андрей Шевченко Интересно, а зачем нужно делать этот swap ? В чем фишка? Это стандартный способ очистки контейнеров - swap с пустым, эти контейнеры меняются хранимыми объектами в памяти, над которыми производят операции. Применил не подумав, т.к. заставил выделять память заново, твой способ с resize лучше. Кстати, и не совсем понятно на счет "insert_iterator(s)" - например у меня такая конструкция не работает (STL от VC7.1). Код: plaintext 1. 2. 3. 4. 5. не факт, что компилятор не создаст лишний временный объект при компилировании return этой ф-ции, поэтому юзаю непосредственно insert_iterator. Просто я там описался (причем дважды), строчил быстро навскидку прямо в форум :), описки, разумеется можно было и исправить, тогда все заработало бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 20:24 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
DimBV --только одного непонял что такое STL ? Это то что ты должен знать как "Отче наш" если хочешь быть профи С++ программистом. Формально это библиотека - набор темплейтов - классов контейнеров. Любой приличный компилятор имеет STL в своем составе. vector - работает быстро, но не сортирует зато удобно работать как с обычным массивом. vector<int> a; vector<double> b; vector<любой класс> с; for(int i = 0; i < 100; i++) { a.push_back(i); b.push_back( a ); } deque<> - работает как вектор, но чуть медленне, зато позволяет делать вставки в середину set<> автоматом сортирует, но пряимой доступ к элементам в векторе отсутствует. map<type1, type2> массив, где первый тип = индекс. писать можно до бесконечности - просто открой хелп и смотри. STL - это та мощь, без которые которой все остальные языки просто классом ниже стали а еще круче STL + XML. Код становится проще и уменьшается в размерах. На контрольном проекте стал меньше вдвое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 21:34 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
2Lepsik "а еще круче STL + XML. Код становится проще и уменьшается в размерах." А что такое STL + XML ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 06:54 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
да, если можно подробнее, на чем именно произошла экономия вдвое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 07:24 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
int a[10] = {5, 7, 1, 3, 1, 8, 7, 2, 8, 9}; std::vector<int> v(a, a+10); std::set<int> s; std::copy(v.begin(), v.end(), std::inserter(s, s.begin())); v.resize(s.size()); std::copy(s.begin(), s.end(), v.begin()); Это круто работает но есть одна проблемка он работает для статического масива, а не для динамического ЧТО ДЕЛАТЬ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 12:15 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Ой извините загнался :-)) std::sort(SS, SS + sizeof(SS)/sizeof(SS[0])); std::copy( SS, std::unique(SS, SS + sizeof(SS)/sizeof(SS[0])), std::ostream_iterator<double>(std::cout, " | ") ); для статического , а для динамического? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 12:52 |
|
||
|
Как упорядочить данние в динамическом масиве
|
|||
|---|---|---|---|
|
#18+
Объясни тогда, что ты подразумеваешь под словом "динамический" ? желательно с примером ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2003, 13:42 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=468&tid=2035805]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 417ms |

| 0 / 0 |
