Сообщение 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 пустой :(