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

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

27.11.2012, 01:19. Показов 4029. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2012, 01:19
Ответы с готовыми решениями:

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

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

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

30
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 03:45  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 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
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.11.2012, 03:47
Ну так я вас не понимаю, о чем речь ? О доступе к элементу или добавлении новых элементов ?
0
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 03:50  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так я вас не понимаю, о чем речь ? О доступе к элементу или добавлении новых элементов ?
Добавление элементов в пределах выделенной памяти.
Для доступа там есть метод Get, если вы не видели.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.11.2012, 03:54
Добавление элементов в пределах выделенной памяти.
Ну вот а говорите не путаете людей...

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

Если память выделена, значит значение уже есть, добавлять нечего ( вопрос конечно чем они проинициализированны ).
А значит речь уже об доступе, изменении.
Ну, от ваших постов мы к решению приблизились на целых 0%.
Что, хабрач что-ли закрыли, философ?
Вот такие они, гуманитарий программисты, на словах Бьерны Страуструпы, а на деле ... ну вы поняли.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.11.2012, 04:06
Ну, от ваших постов мы к решению приблизились на целых 0%.
Я пока и задачи внятно не расслышал... и не мы, а вы...
0
 Аватар для ps10n1ck
56 / 50 / 11
Регистрация: 10.11.2010
Сообщений: 132
27.11.2012, 04:19
Цитата Сообщение от 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
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.11.2012, 04:22
Ну так это и тут видно https://www.cyberforum.ru/post3760882.html.
Добавить элемент нельзя данным методом по тому как для этого нужно что-то затереть...
1
 Аватар для ps10n1ck
56 / 50 / 11
Регистрация: 10.11.2010
Сообщений: 132
27.11.2012, 04:26
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так это и тут видно https://www.cyberforum.ru/post3760882.html.
Добавить элемент нельзя данным методом по тому как для этого нужно что-то затереть...
по всей видимости пропустил данный ответ =)
1
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
27.11.2012, 06:39  [ТС]
ps10n1ck, ну это очевидно было. Но спасибо хоть постарался.
Мне нужно было найти другое решение. Про сортировку; иногда нужно менять методы сортировок.
Есть задача - нужно выполнить как задано. Даже если задача очевидно тупая. Преподов не устраивает ответ в виде :"зачем изобретать, когда есть уже велосипеды в виде контейнеров".
Вот так вот, наш гуманитарий Avazart.

Не по теме:

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

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.11.2012, 19:56
Я технарь из технарей, но вот из-за таких горе- недо- программистов станешь не только философом, но и психоаналитиком )

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

Поэтому не для вас, а для тому кому это нужно... я бы посоветовал поискать по форуму готовый класс set c "самопальной" реализацией ... такое не раз проскакивало на форуме...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2012, 19:56

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

Выделение столбцов из матрицы, сортировка полученного вектора, перестановка элементов вектора
Здравствуйте!Нужна помощь в пояснении. Дано задание в файле.По раздельности я примерно понимаю как это сделать,но я так понимаю это все...

Сортировка элементов вектора
Вектор состоит из элементов типа Struct. Их нужно отсортировать по названию в алфавитном порядке, а при совпадении названия отсортировать...

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

Сортировка элементов вектора
Выполнить сортировку элементов в векторе


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru