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

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

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

23 ответов

63 просмотра

А удалить? Если тоже нельзя, то можешь и простой С массив и 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[] возвращает константную ссылку

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта