0

У меня есть «таблица», представленная std::vector, где каждый элемент является boost::fusion::vector. Мне нужно вернуть представление «столбец» этой таблицы как std::vector, без копирования каких-либо значений. Каков наилучший способ сделать это? Я пытаюсь построить std::vector nviews, где n - номер столбца, но он, похоже, не работает. Я на правильном пути или есть другие способы обойти это?возвращающая колонка из std-вектора векторов слияния, без копирования

+0

Можете ли вы использовать C++ 11 или вы ограничены C++ 03? – ildjarn

+0

Наверное, я тоже в порядке, но я хотел бы знать, в чем разница. –

ответ

1

В соответствии с методом 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.

+0

очень полезный ответ, спасибо !! –