Сообщение Re: Про красивость работы с std::vector от 17.03.2025 15:10
Изменено 17.03.2025 15:49 B0FEE664
Re: Про красивость работы с std::vector
Здравствуйте, Shmj, Вы писали:
S>Не очень красиво что при обращении:
S>- будет создавать полную копию всех данных. Как бы постоянная ловушка.
Никакая это не ловушка. Это общепринятая практика.
Т.е. нужно не забывать писать:
const пропущен.
S>И далее. Что если я захочу в итоге переместить данные, забрать владение у MyClass — как красивее оформить?
Написать метод swap
S>
Так можно, но зачем?
Человек, что боится забыть поставить '&' должен так же боятmся забыть написать obj.takeData(); без присвоения
Скрытый текст | |
S>Допустим такая обертка над std::vector: S>
| |
S>Не очень красиво что при обращении:
std::vector<uint8_t> t = obj.getData();
S>- будет создавать полную копию всех данных. Как бы постоянная ловушка.
Никакая это не ловушка. Это общепринятая практика.
Т.е. нужно не забывать писать:
std::vector<uint8_t>& t = obj.getData();
const пропущен.
S>И далее. Что если я захочу в итоге переместить данные, забрать владение у MyClass — как красивее оформить?
Написать метод swap
S>
S>std::vector<uint8_t> takeData()
S>{
S> return std::move(data);
S>}
S>
Так можно, но зачем?
Человек, что боится забыть поставить '&' должен так же боятmся забыть написать obj.takeData(); без присвоения

for(uint8_t n : obj.takeData())
std::cout << ' ' << n;
std::cout << '\n';
// ой, obj пустой :(
Re: Про красивость работы с std::vector
Здравствуйте, Shmj, Вы писали:
S>Не очень красиво что при обращении:
S>- будет создавать полную копию всех данных. Как бы постоянная ловушка.
Никакая это не ловушка. Это общепринятая практика.
S>Т.е. нужно не забывать писать:
const пропущен.
S>И далее. Что если я захочу в итоге переместить данные, забрать владение у MyClass — как красивее оформить?
Написать метод swap
S>
Так можно, но зачем?
Человек, что боится забыть поставить '&' должен так же бояться забыть написать obj.takeData(); без присвоения
Скрытый текст | |
S>Допустим такая обертка над std::vector: S>
| |
S>Не очень красиво что при обращении:
std::vector<uint8_t> t = obj.getData();
S>- будет создавать полную копию всех данных. Как бы постоянная ловушка.
Никакая это не ловушка. Это общепринятая практика.
S>Т.е. нужно не забывать писать:
std::vector<uint8_t>& t = obj.getData();
const пропущен.
S>И далее. Что если я захочу в итоге переместить данные, забрать владение у MyClass — как красивее оформить?
Написать метод swap
S>
S>std::vector<uint8_t> takeData()
S>{
S> return std::move(data);
S>}
S>
Так можно, но зачем?
Человек, что боится забыть поставить '&' должен так же бояться забыть написать obj.takeData(); без присвоения

for(uint8_t n : obj.takeData())
std::cout << ' ' << n;
std::cout << '\n';
// ой, obj пустой :(