powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / На чем писать: С / С++ / Qt ?
61 сообщений из 61, показаны все 3 страниц
На чем писать: С / С++ / Qt ?
    #39391685
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил уходить от MFC и всего что связано с Microsoft. Писать буду из-под Ubuntu, в среде Qt Creator, компилятор gcc.

Интересует чтение/запись файлов, работа с памятью и многопоточные вычисления. Каким из инструментов:
1) средствами С
2) средствами С++
3) средствами Qt

каждую из этих операций лучше выполнять?

Заранее благодарю за участие в беседе.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39391722
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLИнтересует чтение/запись файлов, работа с памятью и многопоточные вычисления.Файлы - всё равно на чём.
Память и потоки - с++11 и выше.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39391818
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbФайлы - всё равно на чём.
Память и потоки - с++11 и выше.

Спасибо за участие! Хочется все же узнать о Qt, потому что иначе непонятно зачем эта библиотека была реализована с таким наполнением (не зря же ведь люди старались- значит чего- то хотели добиться). Поэтому возникают вопросы:

1) Я читал, что С не позволяет указать способ одновременного доступа к файлам (а С++ позволяет). Как с этим вопросом дело обстоит у Qt?

2) Насчет работы с памятью: в моей программе необходимо иметь большие массивы непредсказуемой длины (порядка миллиона записей). Поэтому необходимо динамически выделять память, меняя размер массива по мере его заполнения. В Qt не нашел подобных методов, только альтернативу в виде контейнеров (которые прошу не предлагать). Прав ли я, что в Qt нет динамического выделения памяти, когда можно самому указать выделяемый объем памяти?

3) Зачем на Qt реализовали свои объекты для работы с потоками?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39391858
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с QT я не работал, знаю в общих чертах
1)в сях с файлами работает стандартная библиотека <stdio.h>, она же работает в с++. Стало быть, она и в QT тоже работает. В плюсах (и сразу в QT) есть ещё <fstream>

2) всё, что есть в с++ есть и в QT (по идее должно быть).
Есть такая штука std::experimental::dynarray , она может быть будет в будущем, но сейчас её уже можно использовать. Но никто не говорит, где её взять о_о
Тем не менее, стандартные методы new/delete и *alloc/free никто не отменял, в крайних случаях можно везде их использовать.

3)возможно, что к тому моменту ещё не было с++11.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39391866
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL2) Насчет работы с памятью: в моей программе необходимо иметь большие массивы непредсказуемой длины (порядка миллиона записей). Поэтому необходимо динамически выделять память, меняя размер массива по мере его заполнения.
CEMbЕсть такая штука std::experimental::dynarray
http://en.cppreference.com/w/cpp/container/dynarray std::experimental::dynarray is a sequence container that encapsulates arrays with a size that is fixed at construction and does not change throughout the lifetime of the object .
Классный совет, CEMb, продолжайте "помогать"!
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392011
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLИнтересует чтение/запись файлов, работа с памятью и многопоточные вычисления. Каким из инструментов:
1) средствами С
2) средствами С++
3) средствами Qt

каждую из этих операций лучше выполнять?


На самом деле все эти средства никак не относятся к интересуемым операциям.
Точнее, QT к ним никак не относится, а С и С++ -- это просто два разных языка, ты можешь писать
на любом из них.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392025
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLCEMbФайлы - всё равно на чём.
Память и потоки - с++11 и выше.

Спасибо за участие! Хочется все же узнать о Qt, потому что иначе непонятно зачем эта библиотека была реализована с таким наполнением (не зря же ведь люди старались- значит чего- то хотели добиться). Поэтому возникают вопросы:



автор1) Я читал, что С не позволяет указать способ одновременного доступа к файлам (а С++ позволяет). Как с этим вопросом дело обстоит у Qt?

Бред.

автор2) Насчет работы с памятью: в моей программе необходимо иметь большие массивы непредсказуемой длины (порядка миллиона записей). Поэтому необходимо динамически выделять память, меняя размер массива по мере его заполнения. В Qt не нашел подобных методов, только альтернативу в виде контейнеров (которые прошу не предлагать). Прав ли я, что в Qt нет динамического выделения памяти, когда можно самому указать выделяемый объем памяти?


авторВ Qt не нашел подобных методов, -- тем не менее, они там есть.
Но дело не в этом, QT вообще не имеет отношения к этим вещам, это средства языка и стандартной библиотеки,
всё, что надо, можно ( и нужно) сделать на них.

автор3) Зачем на Qt реализовали свои объекты для работы с потоками?

Потому что QT создана, чтобы писать кроссплатформенные приложения. До C++ 11 в С++ не было средств
для работы с потоками и многопоточностью, поэтому для свободного переноса приложений на QT из одной операционки в другую были сделаны эти обёртки над функциями работы с многопоточностью из операционных систем.

Сейчас эти средства не нужны, в том смысле, что можно их не использовать, а использовать стандартную библиотеку C++ вместо них. Но можно использовать. Кстати, они достаточно сильно разные по подходам, std:: по мне так лучше.


Ещё раз -- QT -- это библиотека для создания UI, графических приложений и приложений multimedia, больше она ни для чего не нужна.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392029
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispAlekseySQL2) Насчет работы с памятью: в моей программе необходимо иметь большие массивы непредсказуемой длины (порядка миллиона записей). Поэтому необходимо динамически выделять память, меняя размер массива по мере его заполнения.


Для этого необходим и достаточен std::vector, и более ничего не нужно.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392110
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivНа самом деле все эти средства никак не относятся к интересуемым операциям.
Точнее, QT к ним никак не относится, а С и С++ -- это просто два разных языка, ты можешь писать
на любом из них.
...
Ещё раз -- QT -- это библиотека для создания UI, графических приложений и приложений multimedia, больше она ни для чего не нужна.


Спасибо!

MasterZivДля этого необходим и достаточен std::vector, и более ничего не нужно.

Не подойдет, потому что я хочу распараллелить некоторые операции (да и работает он медленнее моих smart массивов).
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392151
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLMasterZivНа самом деле все эти средства никак не относятся к интересуемым операциям.
Точнее, QT к ним никак не относится, а С и С++ -- это просто два разных языка, ты можешь писать
на любом из них.
...
Ещё раз -- QT -- это библиотека для создания UI, графических приложений и приложений multimedia, больше она ни для чего не нужна.


Спасибо!

MasterZivДля этого необходим и достаточен std::vector, и более ничего не нужно.

Не подойдет, потому что я хочу распараллелить некоторые операции (да и работает он медленнее моих smart массивов).

Подойдёт, ты просто ещё об этом не знаешь.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392440
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДля этого необходим и достаточен std::vector, и более ничего не нужно.
Ко-ко-ко-кокой котегоричный))) Было бы достаточно — llvm::SmallVector и boost::small_vector не запиливали бы.

И вообще я тут ничего не спрашивал, зачем ты мне отвечаешь?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392452
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispMasterZivДля этого необходим и достаточен std::vector, и более ничего не нужно.
Ко-ко-ко-кокой котегоричный))) Было бы достаточно — llvm::SmallVector и boost::small_vector не запиливали бы.

И вообще я тут ничего не спрашивал, зачем ты мне отвечаешь?
Еще std::map есть и много чего. Чудес не бывает, массив он и в Африке массив, умеешь им пользоваться - будет быстро, не умеешь - для тебя запилили 100500 альтернатив.

PS Слово "котегоричный" пишется через А, это не про котиков.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392459
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaT 20103834 : Не силен в плюсах
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392464
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispDimaT 20103834 : Не силен в плюсах
и это все что на меня ты накопал?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392569
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLРешил уходить от MFC и всего что связано с Microsoft. Писать буду из-под Ubuntu, в среде Qt Creator...
...
Заранее благодарю за участие в беседе.


В Qt все есть ... c ограничениями. И контейнеры, и треды, и строки, и работа с файлами.

Для работы с ОС - зависимыми вещами Qt подходит слабо. Например, работа с файлами (QFile): http://doc.qt.io/qt-5/qfile.html#platform-specific-issues
...

Считается, что библиотека классов Qt более функциональна, чем STL.
Вместе с тем, STL более производительна с т.зр. времени. Qt - более оптимизированы по использованию памяти и "менее глючны".

Общая рекомендация Qt - разработчикам: используйте библиотеку классов Qt до тех пор, пока это возможно.
Так пишут. В книжках о Qt. :)
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392630
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispКлассный совет, CEMb, продолжайте "помогать"!каюсь, виноват. Все иногда ошибаются.

Тогда посоветую boost::shared_array или shared_ptr на std::vector или shared_ptr на указатель своего массива с указанием функции-удалятеля. Этого должно хватить :)
да в общем-то: Dima TЕще std::map есть и много чего. Чудес не бывает, массив он и в Африке массив, умеешь им пользоваться - будет быстро, не умеешь - для тебя запилили 100500 альтернатив.
вектор плох тем, что внутри указатели, т.е. в случае больших объёмов/скоростей нужно будет ещё тратить шаг на разыменование. Поэтому я бы для себя выбрал shared_ptr на указатель своего массива в случае больших данных.
Dima T и это все что на меня ты накопал?чемодан, вокзал, ява
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392667
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД"менее глючны".
stl глючна - как страшно жить...
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392674
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbвектор плох тем, что внутри указатели, т.е. в случае больших объёмов/скоростей нужно будет ещё тратить шаг на разыменование.
Для больших скоростей указатели есть
Код: plaintext
1.
my_type_t p* = &arr[0];


быстрее некуда, только за пределы массива не залезь случайно.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392677
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbвектор плох тем, что внутри указатели
Путаешь, внутри вектора обычный массив. std::vector это просто обертка, которая сама память выделяет и следит чтобы за пределы не выходили.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392753
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПутаешь, внутри вектора обычный массив. std::vector это просто обертка, которая сама память выделяет и следит чтобы за пределы не выходили.ага, но чтобы до неё (до памяти) добраться, нужно использовать итераторы, которые по сути указатели. Когда ты обращаешься через итератор - зовётся метод вектора, который извлекает тебе объект. На счёт того, что там внутри вектора, как оно там лежит в памяти, в общем случае неизвестно/может поменяться в следующих редакциях и так далее, лучше туда напрямую не лезть.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392765
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbчемодан, вокзал, ява

Чемодан, вокзал, 1с :)
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392772
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите, а у меня есть право бесплатной некоммерческой разработки в Qt Creator?

Каждый раз когда захожу среда отсчитывает мне evaluation- период и по кнопке "Activation", перебрасывает на страницу покупки продукта (без возможности указать о некоммерческом использовании продукта).
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392810
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbDima TПутаешь, внутри вектора обычный массив. std::vector это просто обертка, которая сама память выделяет и следит чтобы за пределы не выходили.ага, но чтобы до неё (до памяти) добраться, нужно использовать итераторы, которые по сути указатели. Когда ты обращаешься через итератор - зовётся метод вектора, который извлекает тебе объект.
Это только в коде так выглядит, а после того как поработает оптимизатор это исчезает.
У меня по скорости сомнения были, я как-то замерял, не сильно медленнее, точно не помню, вроде 10-20%
ИМХО медленнее из-за проверки что индекс за пределы не вышел.

CEMbНа счёт того, что там внутри вектора, как оно там лежит в памяти, в общем случае неизвестно/может поменяться в следующих редакциях и так далее, лучше туда напрямую не лезть.
Все известно, ничего не поменяется
http://www.cplusplus.com/reference/vector/vector/ Vectors are sequence containers representing arrays that can change in size.

Just like arrays, vectors use contiguous storage locations for their elements, which means that their elements can also be accessed using offsets on regular pointers to its elements, and just as efficiently as in arrays. But unlike arrays, their size can change dynamically, with their storage being handled automatically by the container.
Единственное, что надо учитывать, это то, что при добавлении элементов он может переехать в другое место в памяти, и ранее взятый указатель будет указывать непонятно куда.
Т.е. пока используешь указатель нельзя добавлять элементы или обновлять указатель после добавления.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392865
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто только в коде так выглядит, а после того как поработает оптимизатор это исчезает.
У меня по скорости сомнения были, я как-то замерял, не сильно медленнее, точно не помню, вроде 10-20%
ИМХО медленнее из-за проверки что индекс за пределы не вышел.а если через итератор? Через итератор должно ещё быстрее быть.
Dima TТ.е. пока используешь указатель нельзя добавлять элементы или обновлять указатель после добавления.ага, я пока бегаю по вектору, если надо что-то добавить или убавить - складываю это в отдельные вектора, и только после итераций делаю добавление/удаление. Неудобно, но иначе никак.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392912
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbDima TЭто только в коде так выглядит, а после того как поработает оптимизатор это исчезает.
У меня по скорости сомнения были, я как-то замерял, не сильно медленнее, точно не помню, вроде 10-20%
ИМХО медленнее из-за проверки что индекс за пределы не вышел.а если через итератор? Через итератор должно ещё быстрее быть.
С итератором быстрее, скорость как с массивом.
Тестis_sort() проверяет отсортирован ли массив. Тестил недавно.
Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
bool is_sort(std::vector<std::string> &a) {
	if (a.size() <= 1) return true;
	for(size_t i = 1; i < a.size(); i++) {
		if(a[i - 1] > a[i]) {
			return false;
		}
	}
	return true;
}

bool is_sort2(std::string *a, size_t size) {
	if (size <= 1) return true;
	for (size_t i = 1; i < size; i++) {
		if (a[i - 1] > a[i]) {
			return false;
		}
	}
	return true;
}

bool is_sort3(std::vector<std::string> &a) {
	if (a.size() <= 1) return true;
	for (std::vector<std::string>::iterator prev = a.begin(), it = a.begin() + 1; it != a.end(); it++, prev++) {
		if (*prev > *it) {
			return false;
		}
	}
	return true;
}

bool is_sort4(std::string *a, size_t size) {
	if (size <= 1) return true;
	std::string *end = &a[size];
	for (std::string *i = &a[1], *prev = &a[0]; i < end; i++, prev++) {
		if (*prev > *i) {
			return false;
		}
	}
	return true;
}


Результат на 10 млн. элементов
ФункцияВремяis_sort41 msis_sort236 msis_sort336 msis_sort439 ms

is_sort4 по сути тоже самое что и is_sort3, но почему-то медленнее. Наверно оптимизатор плохо понял такую конструкцию.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39392998
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНарод, подскажите, а у меня есть право бесплатной некоммерческой разработки в Qt Creator?

Да, есть.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393039
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivAlekseySQLНарод, подскажите, а у меня есть право бесплатной некоммерческой разработки в Qt Creator?

Да, есть.

Краткость- сестра таланта! :)

Как мне тогда активировать среду, чтобы не появлялось окно при ее старте?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393055
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю, тебе нужно просто установить некоммерческую версию QT Creator.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393504
chagoserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНарод, подскажите, а у меня есть право бесплатной некоммерческой разработки в Qt Creator?

Каждый раз когда захожу среда отсчитывает мне evaluation- период и по кнопке "Activation", перебрасывает на страницу покупки продукта (без возможности указать о некоммерческом использовании продукта).
Download Qt Open Source
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393534
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbCommon LispКлассный совет, CEMb, продолжайте "помогать"!каюсь, виноват. Все иногда ошибаются.
Ага. Только почему-то у некоторых это случается слишком часто.
CEMbвектор плох тем, что внутри указатели
Поэтому я бы для себя выбрал shared_ptr
Вектор плох, потому что внутри указатели, а в shared_ptr никаких указателей нет?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393539
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДля больших скоростей указатели есть
Код: plaintext
1.
my_type_t p* = &arr[0];


быстрее некуда, только за пределы массива не залезь случайно.В чём тут профит? Оптимизатор и так обращения к вектору по индексу заинлайнит до эквивалентного состояния.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393548
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbDima TПутаешь, внутри вектора обычный массив. std::vector это просто обертка, которая сама память выделяет и следит чтобы за пределы не выходили.ага, но чтобы до неё (до памяти) добраться, нужно использовать итераторыНужно использовать http://en.cppreference.com/w/cpp/container/vector/data
CEMbкоторые по сути указатели. Когда ты обращаешься через итератор - зовётся метод вектораЕсли это "по сути указатели", зачем звать метод? Лол. Не знаю, где итераторы зовут методы, в GNU libstdc++ (в llvm-овской libcxx скорее всего так же, лень проверять) итератор для вектора — это тупо обёртка над указателем. Этот указатель инициализируется значением указателя на данные внутри вектора. И дальше всякие операторы разыменования * или -> или инкрементов/сложений работают напрямую с этим указатем. После инлайнинга никакого отличия от работы с голым указателем не остаётся.
Причина использования не голого указателя в качестве итератора, а класса-обёртки над ним, я думаю, историческая. Вполне можно голый указатель возвращать на данные. Для std::array, например, итератор — это голый указатель (в GNU-библиотеке).
CEMbНа счёт того, что там внутри вектора, как оно там лежит в памяти, в общем случае неизвестно/может поменяться в следующих редакциях и так далее, лучше туда напрямую не лезть.В общем случае — неизвестно, а в случае C++11 и старше — известно: данные лежат последовательно в одном куске памяти.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393562
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TС итератором быстрее, скорость как с массивом.
is_sort() проверяет отсортирован ли массив. Тестил недавно.
Результат на 10 млн. элементов
ФункцияВремяis_sort41 msis_sort236 msis_sort336 msis_sort439 ms
is_sort4 по сути тоже самое что и is_sort3, но почему-то медленнее. Наверно оптимизатор плохо понял такую конструкцию.
Можно код для тестирования?
Какой компилятор использовался?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393567
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispВ общем случае — неизвестно, а в случае C++11 и старше — известно: данные лежат последовательно в одном куске памяти.
До C++11 - тоже. Это изначально подразумевалось, просто в стандарте 98 забыли упомянуть об этом. А редакции 2003 уже явно указано.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393570
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispПричина использования не голого указателя в качестве итератора, а класса-обёртки над ним, я думаю, историческая.
Необязательно. Например всякие trait'ы, определяющие категорию итератора, удобнее с кастомными классами делать, чем со встроенными.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39393574
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyCommon LispПричина использования не голого указателя в качестве итератора, а класса-обёртки над ним, я думаю, историческая.
Необязательно. Например всякие trait'ы, определяющие категорию итератора, удобнее с кастомными классами делать, чем со встроенными.
Итератор в вектор должен быть random access iterator. Обычный указатель вполне удовлетворяет требованиям к random access-итератору.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394330
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TС итератором быстрее, скорость как с массивом.
добавил тест с указателем на char
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
bool is_sort5(char *a, size_t size) {
         if (size <= 1) return true;
         char *pszPrev = a;
         char *pszCurr = pszPrev+1;
         for (size_t i = 1; i < size; i++) {
                 if (*pszPrev++ > *pszCurr++) {
                          return false;
                 }
         }
         return true;

}
результаты
1> 172
2> 125
3> 109
4> 140
5> 0

под дебагом:
1> 8611
2> 5663
3> 62307 - интересно...
4> 4508
5> 47

т.е. получается, что все работы с stl на порядки медленнее

Common LispCEMbкаюсь, виноват. Все иногда ошибаются.
Ага. Только почему-то у некоторых это случается слишком часто.если есть ко мне конкретные претензии, давайте обсудим. Если от меня вред, я перестану отвечать на вопросы, не вопрос и без обид :)Common LispCEMbПоэтому я бы для себя выбрал shared_ptr
Вектор плох, потому что внутри указатели, а в shared_ptr никаких указателей нет?у меня там было больше текста во фразе, который раскрывал смысл и способ использования shared_ptr, и почему это лучше указателя/итератора, а так же я сказал "для себя бы", т.е. никому не советую, потому что метод небезопасный.Common LispЕсли это "по сути указатели", зачем звать метод? Лол.В классе итератора оператор -> перехвачен (ms с++11), поэтому, когда мы обращаемся к элементу вектора it->f(), компилятор вставляет вызов метода, т.е. этот вопрос - к микрософтовскому компилятору.Common LispПосле инлайнинга никакого отличия от работы с голым указателем не остаётся.релиз не смотрел, может там всё лучше.
Common LispНужно использовать http://en.cppreference.com/w/cpp/container/vector/data спасибо, про data не знал, ну и да, получается, это гарантирует, что с с++11 данные лежат одним куском.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394343
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbDima TС итератором быстрее, скорость как с массивом.
добавил тест с указателем на char ...
Некорректная добавка, поэтому выводы неправильные. У меня проверка что массив строк отсортирован, а ты массив символов проверяешь.

Тест изначально был совсем про другое, я тестил скорость сортировки сортированного массива строк в сравнении с проверкой что массив сортирован. Тест был готовый, поэтому туда же добавил, чтобы что-то новое не изобретать.
Полный код теста
Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
#include <windows.h>
#include <stdio.h>

#include <string>
#include <vector>
#include <algorithm>
#include <time.h>

#define TEST_SIZE 10000000

bool is_sort(std::vector<std::string> &a) {
	if (a.size() <= 1) return true;
	for(size_t i = a.size() - 1; i > 0; i--) {
		if(a[i - 1] > a[i]) {
			return false;
		}
	}
	return true;
}

bool is_sort2(std::string *a, size_t size) {
	if (size <= 1) return true;
	for (size_t i = 1; i < size; i++) {
		if (a[i - 1] > a[i]) {
			return false;
		}
	}
	return true;
}

bool is_sort3(std::vector<std::string> &a) {
	if (a.size() <= 1) return true;
	for (std::vector<std::string>::iterator prev = a.begin(), it = a.begin() + 1; it != a.end(); it++, prev++) {
		if (*prev > *it) {
			return false;
		}
	}
	return true;
}

bool is_sort4(std::string *a, size_t size) {
	if (size <= 1) return true;
	std::string *end = &a[size];
	for (std::string *i = &a[1], *prev = &a[0]; i < end; i++, prev++) {
		if (*prev > *i) {
			return false;
		}
	}
	return true;
}

std::vector<std::string> a(TEST_SIZE);

__declspec(noinline) void test1() {
	clock_t t = clock();
	if (is_sort(a)) {
		printf("Ordered %d ms\n", clock() - t);
	}
	else {
		printf("Unordered %d ms\n", clock() - t);
	}
}

__declspec(noinline) void test2() {
	clock_t t = clock();
	if (is_sort2(&a[0], a.size())) {
		printf("Ordered2 %d ms\n", clock() - t);
	}
	else {
		printf("Unordered2 %d ms\n", clock() - t);
	}
}

__declspec(noinline) void test3() {
	clock_t t = clock();
	if (is_sort3(a)) {
		printf("Ordered3 %d ms\n", clock() - t);
	}
	else {
		printf("Unordered3 %d ms\n", clock() - t);
	}
}

__declspec(noinline) void test4() {
	clock_t t = clock();
	if (is_sort4(&a[0], a.size())) {
		printf("Ordered4 %d ms\n", clock() - t);
	}
	else {
		printf("Unordered4 %d ms\n", clock() - t);
	}
}

int main()
{
	uint32_t k = 123456;
	for (int i = 0; i < TEST_SIZE; i++) {
		char buf[10];
		_itoa(k, buf, 10);
		a[i] = buf;
		k = (k * 65537 + 2017) % 1000000;
	}
	printf("Load OK\n");
	clock_t t = clock();
	std::sort(a.begin(), a.end());
	printf("Sort %d ms\n", clock() - t);
	t = clock();
	std::sort(a.begin(), a.end());
	printf("Sort2 %d ms\n", clock() - t);
	test1();
	test1();
	test1();
	test2();
	test2();
	test2();
	test3();
	test3();
	test3();
	test4();
	test4();
	test4();

	return 0;
}

...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394344
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispМожно код для тестирования?
Какой компилятор использовался?
Код выше. Компилятор MSVC2015

Тест не очень корректный. Как написал выше изначально тестил другое. Тут погрешности таймера большую погрешность вносят. По хорошему надо чтобы общее время было порядка секунды и более.
Для себя давно вывод сделал что вектор и обычный массив примерно одинаковы по скорости, поэтому пользуюсь вектором.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394369
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНекорректная добавка, поэтому выводы неправильные. У меня проверка что массив строк отсортирован, а ты массив символов проверяешь.Ну я просто хотел посмотреть по скоростям.
Да, странно, что на итераторах скорости ниже. Смотрел релизную сборку под дебагом, ничё не понял
Оптимизатор лютует.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394421
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКомпилятор MSVC2015Так я и подумал.
Вот, https://godbolt.org/g/wsyjrT , GCC выдаёт для цикла функций 3 и 4 эквивалентный с точностью до переименования регистров код. clang тоже выдаёт почти одинаковый код.
Думаю, делать бенчмарк смысла нет, видно, что время должно быть одинаковым.
CEMbОптимизатор лютует.Оптимизатор MSVC не может лютовать, т.к. его не существует, ха-ха.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394429
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispОптимизатор MSVC не может лютовать, т.к. его не существует, ха-ха.
школота
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394450
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispОптимизатор MSVC не может лютовать, т.к. его не существует, ха-ха.ну, для начала он воткнул все функции в код, хотя его не просили явно. Так что он всё ж таки есть. Дальше я попытался бегло понять, как/что/какие данные он обрабатывает, но сразу ниасилил (я избалованный, обычно дебажные сборки смотрю, поэтому непривычно), ну и на строчке:
Код: asm
1.
2.
3.
xor eax, eax
test eax, eax
jne ...

они меня потеряли (да, там скорее всего где-то джмп, но уже лень стало такую магию расплетать)
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394485
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

оптимизер воркс файн(с)

На самом деле, в некоторых случаях, шаблонный код быстрее классического, т.к. по факту получается полный инлайн.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394516
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivПодозреваю, тебе нужно просто установить некоммерческую версию QT Creator.

Да, спасибо, так и оказалось.

А как посмотреть реализацию библиотеки С? Например, есть библиотечная функция strlen. Как ее реализацию можно посмотреть?

Вопрос волнует, потому что книги не актуальны и часто упрощенные. Возможно библиотека представляет больше возможностей (количество функций и количество их параметров). Думаю самое актуальное можно найти только в самой библиотеке.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394522
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLА как посмотреть реализацию библиотеки С? Например, есть библиотечная функция strlen. Как ее реализацию можно посмотреть? http://sourceware.org/git/?p=glibc.git;a=blob;f=string/strlen.c
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394554
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Common LispAlekseySQLА как посмотреть реализацию библиотеки С? Например, есть библиотечная функция strlen. Как ее реализацию можно посмотреть? http://sourceware.org/git/?p=glibc.git;a=blob;f=string/strlen.c

А с описанием функций есть?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394558
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Common LispAlekseySQLА как посмотреть реализацию библиотеки С? Например, есть библиотечная функция strlen. Как ее реализацию можно посмотреть? http://sourceware.org/git/?p=glibc.git;a=blob;f=string/strlen.c

Честно говоря, хочется из среды разработки все смотреть. Так можно быть уверенным, что не будет рассогласования между моей версией библиотеки и той, что в интернете.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394575
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLCommon Lispпропущено...
http://sourceware.org/git/?p=glibc.git;a=blob;f=string/strlen.c

Честно говоря, хочется из среды разработки все смотреть. Так можно быть уверенным, что не будет рассогласования между моей версией библиотеки и той, что в интернете.

Как бы стандартная библиотека одна на всех, везде одинаковая, в этом и есть её прелесть...
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394580
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

реализации разные
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394589
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЧестно говоря, хочется из среды разработки все смотреть. Так можно быть уверенным, что не будет рассогласования между моей версией библиотеки и той, что в интернете.посмотреть в каталоге компилятора что мешает?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394613
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychAlekseySQLЧестно говоря, хочется из среды разработки все смотреть. Так можно быть уверенным, что не будет рассогласования между моей версией библиотеки и той, что в интернете.посмотреть в каталоге компилятора что мешает?

В настройках среды указано, что компилятор находится в /usr/bin

Там никаких текстовых файлов библиотек не нашел.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394619
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели нет никакого инструмента (может отдельной утилитой), чтобы разработчик мог посмотреть установленные библиотеки, а не копаться в инете. Ведь это тривиальная справка.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394623
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

man
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394639
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Common LispAlekseySQL,

man

Вы предлагаете читать manual-ы? Где они лежат и какой есть удобный инструмент их чтения?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394644
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая разница, где лежат. Инструмент — man
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394669
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Common LispКакая разница, где лежат. Инструмент — man

Можно дать ссылку на этот чудо- инструмент? Я не могу найти его в инете.
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394672
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLCommon LispКакая разница, где лежат. Инструмент — man

Можно дать ссылку на этот чудо- инструмент? Я не могу найти его в инете.В терминале набери
Код: coco
1.
man man
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394705
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Common Lispman man

А поудобнее есть что- нибудь?
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394735
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

http://www.cplusplus.com/reference/

И вообще, если функция стандартной библиотеки, неважно как она работает (а местами еще и хрен разберешься).
Верь стандарту
...
Рейтинг: 0 / 0
На чем писать: С / С++ / Qt ?
    #39394756
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common LispAlekseySQLпропущено...


Можно дать ссылку на этот чудо- инструмент? Я не могу найти его в инете.В терминале набери
Код: coco
1.
man man



Да прямо в гугле можно набирать

Код: plaintext
man snprintf
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / На чем писать: С / С++ / Qt ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]