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

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

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

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

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

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

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

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

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

3)возможно, что к тому моменту ещё не было с++11.
...
Рейтинг: 0 / 0
26.01.2017, 10:59
    #39391866
Common Lisp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
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
26.01.2017, 13:03
    #39392011
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
AlekseySQLИнтересует чтение/запись файлов, работа с памятью и многопоточные вычисления. Каким из инструментов:
1) средствами С
2) средствами С++
3) средствами Qt

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


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

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



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

Бред.

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


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

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

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

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


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


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


Спасибо!

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

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


Спасибо!

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

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

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

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

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

PS Слово "котегоричный" пишется через А, это не про котиков.
...
Рейтинг: 0 / 0
26.01.2017, 20:15
    #39392459
Common Lisp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
DimaT 20103834 : Не силен в плюсах
...
Рейтинг: 0 / 0
26.01.2017, 20:19
    #39392464
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
Common LispDimaT 20103834 : Не силен в плюсах
и это все что на меня ты накопал?
...
Рейтинг: 0 / 0
26.01.2017, 23:19
    #39392569
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
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
27.01.2017, 05:21
    #39392630
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
Common LispКлассный совет, CEMb, продолжайте "помогать"!каюсь, виноват. Все иногда ошибаются.

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


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

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

Каждый раз когда захожу среда отсчитывает мне evaluation- период и по кнопке "Activation", перебрасывает на страницу покупки продукта (без возможности указать о некоммерческом использовании продукта).
...
Рейтинг: 0 / 0
27.01.2017, 10:53
    #39392810
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
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
27.01.2017, 11:42
    #39392865
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
Dima TЭто только в коде так выглядит, а после того как поработает оптимизатор это исчезает.
У меня по скорости сомнения были, я как-то замерял, не сильно медленнее, точно не помню, вроде 10-20%
ИМХО медленнее из-за проверки что индекс за пределы не вышел.а если через итератор? Через итератор должно ещё быстрее быть.
Dima TТ.е. пока используешь указатель нельзя добавлять элементы или обновлять указатель после добавления.ага, я пока бегаю по вектору, если надо что-то добавить или убавить - складываю это в отдельные вектора, и только после итераций делаю добавление/удаление. Неудобно, но иначе никак.
...
Рейтинг: 0 / 0
27.01.2017, 12:29
    #39392912
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На чем писать: С / С++ / Qt ?
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
Форумы / C++ [игнор отключен] [закрыт для гостей] / На чем писать: С / С++ / Qt ? / 25 сообщений из 61, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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