У меня есть «таблица», представленная std::vector
, где каждый элемент является boost::fusion::vector
. Мне нужно вернуть представление «столбец» этой таблицы как std::vector
, без копирования каких-либо значений. Каков наилучший способ сделать это? Я пытаюсь построить std::vector
nviews, где n - номер столбца, но он, похоже, не работает. Я на правильном пути или есть другие способы обойти это?возвращающая колонка из std-вектора векторов слияния, без копирования
ответ
В соответствии с методом docs here метод at<N>(s)
возвращает boost::fusion::vector
ссылку на содержащийся элемент.
Также, если вы используете форматированную версию версии 1.48, они поддерживают семантику перемещения C++ 11. Это означает, что у вас может быть функция, которая зацикливается на размер вашей таблицы для определенного столбца no, скажем i
, и заполняет вектор-столбец, который является std::vector
. Затем вы просто возвращаете этот вектор столбца, и вызывающая функция получит move
d std::vector
. Никаких копий в любой момент не производится.
Вы можете узнать больше о move semantics here на самой странице стандартов. Вы также можете посмотреть видео из Bjarne Stroustrup explaining it in brief here. Перейти к минуте 37 и смотреть до минуты 43.
очень полезный ответ, спасибо !! –
Можете ли вы использовать C++ 11 или вы ограничены C++ 03? – ildjarn
Наверное, я тоже в порядке, но я хотел бы знать, в чем разница. –