powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
22 сообщений из 422, страница 17 из 17
Различные структуры данных. Реализация
    #39291173
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВ первом случае может вызываться только конструктор?
В первом случае - это создание экземпляра, который потом присваивается в переменную.
Что при этом вызывается зависит от типов слева и справа от =.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39291178
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskySashaMercuryМне не нравится, что он с маленькой буквы, кажется что это функция или метод, а не класс
На самом деле, это даже логично, т.к. во многих случаях никакой разницы между использованием класса и функции нет ))

Код: plaintext
1.
2.
auto val1 = class_name(args);
auto val2 = function_name(args);


Для полноты, раз тема про функторы:
Код: plaintext
1.
2.
3.
auto val1 = class_name(args);
auto val2 = function_name(args);
auto val3 = object_name(args);
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39291179
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryВ первом случае может вызываться только конструктор?
В первом случае - это создание экземпляра, который потом присваивается в переменную.
Что при этом вызывается зависит от типов слева и справа от =.

Создание экземпляра, понятно. Вызывается один из конструкторов, какой именно зависит от типов параметров конструктора. fe:
Код: plaintext
1.
2.
T_L val1 = class_name(T4 arg0, T2 arg1);
T_L val1 = class_name(T8 arg0,T7 arg1, T1 arg2);


В данном случае будут созданы экземпляры пользовательского типа, но при этом каждый будет создан образом, описанным в своем конструкторе. Но как на создание экземпляра может повлиять T_L? Или я что-то не так понял
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39291182
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинДля полноты, раз тема про функторы:
Код: plaintext
1.
2.
3.
auto val1 = class_name(args);
auto val2 = function_name(args);
auto val3 = object_name(args);


Да, пропустил. ))

SashaMercuryНо как на создание экземпляра может повлиять T_L?
Никак. Но при присвоении, в зависимости от задействованных типов, может еще вызваться оператор конверсии типа и оператор присвоения.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39291229
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, я узнал много нового. Нужно более плотно читать книги по С++, благо они у меня есть( Меня гонят спать. Всем хороших выходных C:
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299124
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переписал одну функцию, для расчёта динамики частного процесса. В качестве структуры данных использовал последовательный контейнер vector. Пока вижу одни плюсы, очень удобно и лично я пока очень доволен. Неужели нет никаких подводных камней и всё должно быть так просто? Не нужно в разных местах кода добавлять блоки отвечающие за освобождение памяти, код становится читабельней. И при этом, возможность обратиться к элементу вектора как к элементу массива сохранилась. Но самое главное, код стал читабельней и его размер уменьшился. И теперь я не боюсь что забуду освободить память. Но всё-таки, за всё нужно платить, должны быть минусы
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299168
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНо всё-таки, за всё нужно платить, должны быть минусы
Минусы проявляются в режиме отладки, когда отключена оптимизация и код не инлайнится - работает медленнее т.к. [] в этом случае - дополнительный вызов функции.
А в стандартном режиме, никаких минусов,в по сравнению с массивом созданным через malloc, нет.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299173
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подводный камень - в интеграции. Чем дальше ты уходишь от С к С++ c STL тем
сложнее тебе сделать callback твоей функции из Java (к примеру). Возможно я это
говорю не к времени и не к месту но это тоже недостаток который при проектировании
нужно знать и учитывать.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299184
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПодводный камень - в интеграции. Чем дальше ты уходишь от С к С++ c STL тем
сложнее тебе сделать callback твоей функции из Java (к примеру).
JNI обертки можно компилировать как С так и С++. Стыдно не знать )))
Поэтому никакой практической разницы конкретно в этом вопросе нет.

Если же говорить вообще, то написание С-оберток к С++ классам настолько тривиально, что это - небольшой оверхед по сравнению с теми объемами отладки которые снимаются с программиста в результате того что ему не нужно думать об управлении памятью.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299188
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, у нас разговор идет в контексте std::vector.

Верно?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299191
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAnatoly Moskovsky, у нас разговор идет в контексте std::vector.

Верно?
Верно. Конкретно между vector и просто буфером нет никакой практической разницы. Потому что vector это и есть буфер + автоматическое удаление.
Если вы например хотите доступ к буферу из ЯП который поддерживает только С АПИ, то код оберток будет практически совпадать один в один что для С что для С++.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, ну представь что Саша закодил некое ПО активно используя std::vector
как базовую единицу для callbacks. Он передает и принимает аргументы в этом шаблоне.
Далее я. Заметя что это ПО замечательное, и мне очень нужно я хочу его в своё
приложение интегрировать. Моё приложение написано на Java.

И дальше я весь превратился в слух и ожидаю от Анатолия различных лайф-хаков
или хитростей как мне дальше быть.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299204
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Я же написал. Разницы между интерфейсным кодом с буфером и с вектором практически не будет.
Поэтому никаких дополнительных хаков из-за того, что это вектор, не надо.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299235
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, vector<> это просто массив, все его подводные камни это перемещение в памяти при увеличении в размере.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299238
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как вам такая библиотечка для Си?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299246
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)а как вам такая библиотечка для Си?
Как остроумный прикол - сойдет ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299252
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно. Пускай Саша даст больше сведений и тогда я разовью мысль.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299284
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЛадно. Пускай Саша даст больше сведений и тогда я разовью мысль.

Да какие там сведения. У мне была функция, алгоритм которой является в целом классическим случаем динамического программирования. Необходимо было создать динамический массив, из функции можно было выйти в разных точках, соответственно в каждой точке я должен был дублировать освобождение памяти. Кроме того, размер массива не был известен мне заранее, т.о. мне необходимо было использовать либо realloc либо аналог из С++/STD(без STD, видимо вызывать new с повторным копированием). Кроме того, необходимо было постоянно сопровождать размер массива. Перечисленные факторы приводят к тому, что мне труднее анализировать сам алгоритм, я отвлекаюсь на побочные факторы. Потому я решил открыть стандарт и BS в местах, которые посвящены контейнерам и прочитать информацию о vector конкретно. И использовал его.


PS
Кроме того, использование компаратора в функции сортировки просто шикарная идея, я конечно это и в Си делал(передавал указатель на функцию в качестве параметра другой функции), но очень здорово, что это сделано на уровне языка.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299335
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неудобно только чтение данных из какого-либо потока в vector. Вероятно для таких задач в С++ также существует какой-то стандартный механизм, но пока я не дошел до него. Делаю примерно следующим образом, но это через одно место называется

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        std::map<std::vector<int>, int> tmpts;
 	for (int i = 0; i < m; ++i) {
		std::vector<int> v_cur;
		int i_cur;
		in >> i_cur;
		for (int j = 0; j < l; ++j) {
			v_cur.push_back(0);
			in >> v_cur[j];
		}
		tmpts[v_cur] = i_cur;
	}
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299349
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. istream_iterator и back_inserter, но вполне можно обойтись и
Код: plaintext
1.
2.
3.
4.
v_cur.resize(l);
for(int& t : v_cur) {
  in >> t;
}
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299363
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstсм. istream_iterator и back_inserter, но вполне можно обойтись и
Код: plaintext
1.
2.
3.
4.
v_cur.resize(l);
for(int& t : v_cur) {
  in >> t;
}



Тоже некрасиво, было бы здорово вообще инкапсулировать циклы. Позже посмотрю ссылки.

Спасибо всем за ваши мнения о контейнер vector :)
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #39299387
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryТоже некрасиво, было бы здорово вообще инкапсулировать циклы.напиши функцию/класс для циклов
...
Рейтинг: 0 / 0
22 сообщений из 422, страница 17 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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