2016-09-19 2 views
2

У меня действительно большой valarray, который мне нужно преобразовать в вектор, потому что библиотека, которую я использую, принимает только вектор. Мне интересно, можно ли конвертировать из valarray в вектор без копирования. Вот что у меня есть:Преобразование valarray в вектор без копирования

#include <vector> 
#include <valarray> 

int main() { 
    std::valarray<double> va{ {1, 2, 3, 4, 5} }; 

    //Error: cannot convert from 'initializer list' to 'std::vector<eT,std::allocator<_Ty>>' 
    //std::vector<double> v1{ std::begin(va), va.size() }; 

    //Error: cannot convert from 'std::valarray<double>' to 'std::vector<eT,std::allocator<_Ty>>' 
    //std::vector<double> v2{ std::move(va) }; 

    // Works but I'm not sure if it's copying 
    std::vector<double> v3; 
    v3.assign(std::begin(va), std::end(va)); 
} 

Документация по assign говорит, что функция «присваивает новое содержимое вектора, заменяя его текущее содержимое и изменение его размера соответственно.». Это звучит так, как будто это копирует. Есть ли способ сделать это без копирования?

+0

С 'std :: valarray' и' std :: vector' Я уверен, что это невозможно. –

ответ

5

Нет, я боюсь, что невозможно преобразовать valarray в vector без копирования.

варианты:

  1. Преобразовать существующий кодовая использовать vector и использовать expression templates, чтобы сохранить большую часть преимуществ valarray.
  2. Конвертировать библиотеку для использования valarray.
  3. Копия.

Я бы начал с варианта 3 и просто скопировал.

+1

* «Я бы начал с варианта 3 и просто скопировал». * Хороший совет, это не слишком медленно, пока это не докажет. –

+0

Это несчастливо. Это была бы хорошая функция. Спасибо за вашу помощь. –

Смежные вопросы