170 похожих чатов

Есть ли возможность сделать так, чтобы поле-вектор в классе один

раз инициализировалось в конструкторе и более в него нельзя было бы добавить элементы? При этом с самим элементами в этом векторе должна быть возможность работать как не с const объектами.

23 ответов

42 просмотра

А удалить? Если тоже нельзя, то можешь и простой С массив и std::array и еще подобного в бустах и гитхабах.

В фабрику оберни

Отдавать наружу только итераторы не поможет?

Ну и еще вариант тупо и просто написать свой классик для обертки malloc/free, new/delete или вообще какой умный указатель заюзать.

Viktor Chyzhdzenka
Ну и еще вариант тупо и просто написать свой класс...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Viktor Chyzhdzenka
Ну и еще вариант тупо и просто написать свой класс...

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

const

d7d1cd- Автор вопроса
Ilya Zviagin
const

Тогда и элементы будут const, а мне так не надо.

d7d1cd
Тогда и элементы будут const, а мне так не надо.

class MyClass { public: MyClass() : vc({1, 2, 3, 4}) {} int& getElem(size_t idx) { return const_cast<int&>(vc[idx]); } private: const std::vector<int> vc; };

Андрей Таусинов
class MyClass { public: MyClass() : vc({1, 2, 3, ...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

d7d1cd- Автор вопроса
Ilya Zviagin
Не будут

Не знаю, что тут имелось ввиду, но элемент в таком векторе поменять нельзя.

d7d1cd- Автор вопроса
Андрей Таусинов
class MyClass { public: MyClass() : vc({1, 2, 3, ...

Сделать из того, что изначально const - не const - это UB.

d7d1cd
Сделать из того, что изначально const - не const -...

ну кажется что элементы вектора - не const

d7d1cd- Автор вопроса
Mikail Bagishov
ну кажется что элементы вектора - не const

А не будет ли там какой-то оптимизации?

d7d1cd
А не будет ли там какой-то оптимизации?

ну оптимизации тут не при делах, вопрос что в стандарте написано. Я не помню, чтобы там было что-то типа "если вектор помечен как const, то его внутренний массив тоже const" (и вообще кажется, что такая формулировка невозможна)

Mikail Bagishov
ну кажется что элементы вектора - не const

Если коллекция немутабельная, то и элементы её тоже. Это не в плюсах, это вообще так

netricks
Если коллекция немутабельная, то и элементы её тож...

ну значит вопрос в том, насколько const vector иммутабельный. Андрей утверждает (и на мой взгляд убедительно), что его иммутабельность это (в некоторых отношениях) конвенция.

Mikail Bagishov
ну значит вопрос в том, насколько const vector имм...

Обойти завсегда можно. Но если вы пометили вектор как const и собираетесь что-то в нём менять, или что ещё хуже, ожидаете, что в нём что-то поменяется во время работы с ним, то вы, веооятно, что-то делаете не так. Наверно, не надо передавать его через константную ссылку, например

netricks
Обойти завсегда можно. Но если вы пометили вектор ...

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

Mikail Bagishov
ну оптимизации тут не при делах, вопрос что в стан...

Внутрений массив не конст, но operator[] возвращает константную ссылку

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта