Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
vechestva
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
#1

Сортировка вектора, после добавление элементов

27.11.2012, 01:19. Просмотров 1788. Ответов 30
Метки нет (Все метки)

Доброго.
Есть класс массив. После каждого добавления элемента он должен сортировать элементы по возрастанию.
Вот упрощенный пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class IntArray
{
public:
    IntArray() {}
    IntArray(int size) { m_ints.resize(size); }
    
    void Add(int index, int element)
    {
        m_ints[index] = element;
        sort(m_ints.begin(), m_ints.end());
    }
    int GetElement(int index) const { return m_ints.at(index); }
    
private:
    vector<int> m_ints;
};
но на деле всё совсем не так, всё из-за выделение памяти методом resize().
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
   const char arrSize = 4;
   IntArray arr(arrSize);
   for(char i = 0; i < arrSize; ++i)
       arr.Add(i, rand()%100 + 1);
   for(char i = 0; i < arrSize; ++i)
       cout << arr.Get(i) << endl;
 
   cin.get();
}
на выводе какие то не понятные нули, вместо элементов.
Как решить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 01:19
Ответы с готовыми решениями:

Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора,...

Добавление и исключение элементов вектора
Задача Люди стоят в очереди, но никогда не уходят из её начала, зато могут...

Сортировка вектора массива после удалание элемента
дан массив векторов из 20 чисел; vectorArr = {0,1,2,3,4,5...}; удаляем методом...

Сортировка элементов вектора
Добрый вечер! Набросал наглядный пример, который вызывает ошибку компиляции. ...

Удаление, добавление, перестановка, сортировка элементов массива
Постановка задачи: 1) Сформировать массив из n элементов с помощью датчика...

30
vechestva
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 03:45  [ТС] #21
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
void Add(int index, int element)
Какой смысл index тут если массив все равно сортируется ?

Как говорил один препод писалось правой нагй
C++
1
2
3
4
5
6
...
IntArray arr(4);
arr.Add(3, 3);
arr.Add(0, 0);
arr.Add(1, 1);
arr.Add(2, 2);
Допустим вот такой случай? Вот такой вот смысл.
0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,329
Записей в блоге: 17
27.11.2012, 03:47 #22
Ну так я вас не понимаю, о чем речь ? О доступе к элементу или добавлении новых элементов ?
0
vechestva
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 03:50  [ТС] #23
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так я вас не понимаю, о чем речь ? О доступе к элементу или добавлении новых элементов ?
Добавление элементов в пределах выделенной памяти.
Для доступа там есть метод Get, если вы не видели.
0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,329
Записей в блоге: 17
27.11.2012, 03:54 #24
Добавление элементов в пределах выделенной памяти.
Ну вот а говорите не путаете людей...

Если память выделена, значит значение уже есть, добавлять нечего ( вопрос конечно чем они проинициализированны ).
А значит речь уже об доступе, изменении.
0
vechestva
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 04:03  [ТС] #25
Цитата Сообщение от Avazart Посмотреть сообщение
Ну вот а говорите не путаете людей...

Если память выделена, значит значение уже есть, добавлять нечего ( вопрос конечно чем они проинициализированны ).
А значит речь уже об доступе, изменении.
Ну, от ваших постов мы к решению приблизились на целых 0%.
Что, хабрач что-ли закрыли, философ?
Вот такие они, гуманитарий программисты, на словах Бьерны Страуструпы, а на деле ... ну вы поняли.
0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,329
Записей в блоге: 17
27.11.2012, 04:06 #26
Ну, от ваших постов мы к решению приблизились на целых 0%.
Я пока и задачи внятно не расслышал... и не мы, а вы...
0
ps10n1ck
54 / 48 / 11
Регистрация: 10.11.2010
Сообщений: 132
27.11.2012, 04:19 #27
Цитата Сообщение от vechestva Посмотреть сообщение
ps10n1ck, ну, а теперь попробуйте добавлять элементы по разным индексам?
а смысл в индексах, если потом массив сортируется?
получается так:
Вы выделяете память под 4 элемента, они инициализируются все 0.
Потом присваиваете 0-му элементу значение rand()%100 + 1 (пусть 17) и делаете сортировку - результат таков:
m_ints[0] = 0;
m_ints[1] = 0;
m_ints[2] = 0;
m_ints[3] = 17;
Потом присваиваете 1-му элементу значение rand()%100 + 1 (пусть 21) и делаете сортировку - результат таков:
m_ints[0] = 0;
m_ints[1] = 0;
m_ints[2] = 17;
m_ints[3] = 21;
Потом присваиваете 2-му элементу значение rand()%100 + 1 (пусть 10), тут вы перезаписываете значение 17 (которое ранее находилось по этому адресу) и делаете сортировку - результат таков:
m_ints[0] = 0;
m_ints[1] = 0;
m_ints[2] = 10;
m_ints[3] = 21;
Потом присваиваете 3-му элементу значение rand()%100 + 1 (пусть 55), тут вы перезаписываете значение 21 (которое ранее находилось по этому адресу) и делаете сортировку - результат таков:
m_ints[0] = 0;
m_ints[1] = 0;
m_ints[2] = 10;
m_ints[3] = 55;

вроде бы правильно объяснил причину появления нулей
1
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,329
Записей в блоге: 17
27.11.2012, 04:22 #28
Ну так это и тут видно http://www.cyberforum.ru/post3760882.html.
Добавить элемент нельзя данным методом по тому как для этого нужно что-то затереть...
1
ps10n1ck
54 / 48 / 11
Регистрация: 10.11.2010
Сообщений: 132
27.11.2012, 04:26 #29
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так это и тут видно http://www.cyberforum.ru/post3760882.html.
Добавить элемент нельзя данным методом по тому как для этого нужно что-то затереть...
по всей видимости пропустил данный ответ =)
1
vechestva
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 06:39  [ТС] #30
ps10n1ck, ну это очевидно было. Но спасибо хоть постарался.
Мне нужно было найти другое решение. Про сортировку; иногда нужно менять методы сортировок.
Есть задача - нужно выполнить как задано. Даже если задача очевидно тупая. Преподов не устраивает ответ в виде :"зачем изобретать, когда есть уже велосипеды в виде контейнеров".
Вот так вот, наш гуманитарий Avazart.

Не по теме:

P.S: препод не мой, я уже давно не студент.

0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,329
Записей в блоге: 17
27.11.2012, 19:56 #31
Я технарь из технарей, но вот из-за таких горе- недо- программистов станешь не только философом, но и психоаналитиком )

Цитата Сообщение от vechestva Посмотреть сообщение
P.S: препод не мой, я уже давно не студент.
Такое впечатление что и не учились вообще...
А если б учились то знали что обычный препод все равно за дробит вашу писанину так как вы уже используете STL в своем коде.

Поэтому не для вас, а для тому кому это нужно... я бы посоветовал поискать по форуму готовый класс set c "самопальной" реализацией ... такое не раз проскакивало на форуме...
0
27.11.2012, 19:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 19:56

ЕХЕ файл после ввода элементов вектора прекращает работу
Вот такой код, вычисление евклидовой нормы вектора 2 способами(опыт...

Найти сколько элементов первого вектора совпадают с элементами второго вектора
#include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;vector&gt; #include &lt;set&gt;...

После добавления элементов в список сортировка зависает
Добрый день, поправьте пожалуйста сортировку, после добавления элементов в...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

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