Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501

Ошибка в стандартной библиотеке шланга?

18.06.2013, 01:01. Показов 1986. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обнаружил интересную вещь: std::sort из стандартной библиотеки компилятора clang сортирует неправильно.
Код, на котором это происходит, прилагается:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
 
void print_vector (const std::vector<int> & vector)
{
    for (int x: vector)
    {
        std::cout << x << ' ';
    }
    std::cout << std::endl;
}
 
int main ()
{
    std::vector<int> v(31);
    std::iota(v.begin(), v.end(), 0);
    print_vector(v);
 
    auto compare = std::less_equal<int>();
 
    std::sort(v.begin(), v.end(), compare);
    print_vector(v);
 
    std::cout << (std::is_sorted(v.begin(), v.end(), compare) ? "sorted" : "unsorted")
              << std::endl;
 
    return 0;
}
Проверял на следующих компиляторах:
Code
1
2
3
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin11.4.0
Thread model: posix
Code
1
2
3
clang version 3.2 (tags/RELEASE_32/final)
Target: x86_64-apple-darwin11.4.0
Thread model: posix
При этом в ГЦЦ всё сортируется правильно.

Вопрос:
Это я что-то делаю не так, или у всех такое?
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.06.2013, 01:01
Ответы с готовыми решениями:

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

Есть ли критическая секция в стандартной библиотеке?
Здравствуйте! Собственно, сам вопрос. Как использовать критическую секцию в C++? Нашёл информацию о подобном для windows и linux. Есть...

Ищу справочные материалы по стандартной библиотеке
Всем привет, можете пожалуйста подсказать какие есть функции в с++ , которые облегчают код ,наподобие swap, abc

8
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.06.2013, 11:52
volovzi, Плюсую.

Bash
1
2
3
4
./new
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
unsorted
Используется libc++3.2
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.06.2013, 12:01  [ТС]
Ужос-ужос. Надо заводить баг.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2013, 16:25
volovzi, Почитывал хабр - статья на тему вариадиков, в комментах http://habrahabr.ru/post/183830/ цитируют эту тему. И судя по всему это не является багом.
1
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
20.06.2013, 16:48  [ТС]
Заглянул в стандарт — действительно, требуется отношение строгого порядка.
Я считаю, что это недоработка.
Я бы сформулировал требование к алгоритму так:
В результате работы алгоритма для любых двух итераторов i, j из сортируемого диапазона таких, что i < j, должно выполняться соотношение compare(*i, *j) == true.

В противном случае это не сортировка, а какая-то непонятная шняга.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
21.06.2013, 18:37
А ведь элементы-то в массиве все разные. Для них операция <= ничем не отличается от <.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
21.06.2013, 18:48  [ТС]
@Nick Alte, кстати да, хорошее замечание.
Действительно, логично было бы предположить, что для данного случая все сравнения элементов дадут один и тот же результат и для "<", и для "≤".

Хм.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
21.06.2013, 23:57
В чем смысл сортировать упорядоченный массив?
Как показал отладочный вывод @ForEveR, массив упорядочен, а проблема в
C++
1
2
std::cout << (std::is_sorted(v.begin(), v.end(), compare) ? "sorted" : "unsorted")
              << std::endl;
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
22.06.2013, 00:03  [ТС]
@Dmitriy_M, во-первых, этот пример — для краткости кода. Если элементы в массиве изначально будут в обратном порядке, то результат будет тот же. Во-вторых, каким бы ни был изначальный массив, после сортировки он должен быть упорядочен. В-третьих, прочитай, пожалуйста, внимательно отладочный вывод. Там ... 14 16 15 ...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2013, 00:03
Помогаю со студенческими работами здесь

Min и max в одной функции: существует ли готовое решение в стандартной библиотеке?
Существует ли в C++ функция, которая бы работала как std::min и std:max одновременно? То есть принимала бы три аргумента - минимальное...

Есть ли в стандартной библиотеке модуль (пакет?) для работы с матрицами?
Пытаюсь найти в стандартной библиотеке модуль (пакет?) для работы с матрицами. Нарыл какой-то Data.Matrix, вписал строку &quot;import...

Задача о переливаниях в 2 ёмкости из шланга
Вот условие задачи: Имеется водопроводный шланг с бесконечным количеством воды и две ёмкости разных неправильных форм, в которые ...

Ошибка в определении стандартной API функции
Переписываю Бота по уроку из Ютьюба. Сейчас первый тест бота. Суть - найти в окне приложения определенный цвет пикселя и поместить туда...

Ошибка в использовании библиотеки/ошибка в библиотеке
Изучаю Java, написал библиотеку для рисования некоторых геометрических фигур (точка, круг, квадрат, прямоугольник, эллипс, треугольник)....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru