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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 01:19     Сортировка вектора, после добавление элементов #1
Доброго.
Есть класс массив. После каждого добавления элемента он должен сортировать элементы по возрастанию.
Вот упрощенный пример:
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();
}
на выводе какие то не понятные нули, вместо элементов.
Как решить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 01:19     Сортировка вектора, после добавление элементов
Посмотрите здесь:

C++ Сортировка элементов вектора
C++ ЕХЕ файл после ввода элементов вектора прекращает работу
Сортировка вектора массива после удалание элемента C++
Удаление, добавление, перестановка, сортировка элементов массива C++
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vechestva
-28 / 0 / 0
Регистрация: 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);
Допустим вот такой случай? Вот такой вот смысл.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
27.11.2012, 03:47     Сортировка вектора, после добавление элементов #22
Ну так я вас не понимаю, о чем речь ? О доступе к элементу или добавлении новых элементов ?
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 03:50  [ТС]     Сортировка вектора, после добавление элементов #23
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так я вас не понимаю, о чем речь ? О доступе к элементу или добавлении новых элементов ?
Добавление элементов в пределах выделенной памяти.
Для доступа там есть метод Get, если вы не видели.
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
27.11.2012, 03:54     Сортировка вектора, после добавление элементов #24
Добавление элементов в пределах выделенной памяти.
Ну вот а говорите не путаете людей...

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

Если память выделена, значит значение уже есть, добавлять нечего ( вопрос конечно чем они проинициализированны ).
А значит речь уже об доступе, изменении.
Ну, от ваших постов мы к решению приблизились на целых 0%.
Что, хабрач что-ли закрыли, философ?
Вот такие они, гуманитарий программисты, на словах Бьерны Страуструпы, а на деле ... ну вы поняли.
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
27.11.2012, 04:06     Сортировка вектора, после добавление элементов #26
Ну, от ваших постов мы к решению приблизились на целых 0%.
Я пока и задачи внятно не расслышал... и не мы, а вы...
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 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;

вроде бы правильно объяснил причину появления нулей
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
27.11.2012, 04:22     Сортировка вектора, после добавление элементов #28
Ну так это и тут видно Сортировка вектора, после добавление элементов.
Добавить элемент нельзя данным методом по тому как для этого нужно что-то затереть...
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
27.11.2012, 04:26     Сортировка вектора, после добавление элементов #29
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так это и тут видно Сортировка вектора, после добавление элементов.
Добавить элемент нельзя данным методом по тому как для этого нужно что-то затереть...
по всей видимости пропустил данный ответ =)
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 06:39  [ТС]     Сортировка вектора, после добавление элементов #30
ps10n1ck, ну это очевидно было. Но спасибо хоть постарался.
Мне нужно было найти другое решение. Про сортировку; иногда нужно менять методы сортировок.
Есть задача - нужно выполнить как задано. Даже если задача очевидно тупая. Преподов не устраивает ответ в виде :"зачем изобретать, когда есть уже велосипеды в виде контейнеров".
Вот так вот, наш гуманитарий Avazart.

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 19:56     Сортировка вектора, после добавление элементов
Еще ссылки по теме:

Определить количество положительных элементов вектора С(10) и заменить этим значением минимальный элемент вектора А(5) C++
C++ После добавления элементов в список сортировка зависает

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,560
Записей в блоге: 17
27.11.2012, 19:56     Сортировка вектора, после добавление элементов #31
Я технарь из технарей, но вот из-за таких горе- недо- программистов станешь не только философом, но и психоаналитиком )

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

Поэтому не для вас, а для тому кому это нужно... я бы посоветовал поискать по форуму готовый класс set c "самопальной" реализацией ... такое не раз проскакивало на форуме...
Yandex
Объявления
27.11.2012, 19:56     Сортировка вектора, после добавление элементов
Ответ Создать тему
Опции темы

Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru