векторный конструктор c ++ с пользовательской функцией - PullRequest
0 голосов
/ 25 мая 2018

В настоящее время я работаю с коротким фрагментом кода, в котором я хотел бы взять каждое значение одного вектора, вызвать класс-обертку и поместить в новый вектор.

vector<MyClass> input;
vector<WrapperClass> output;
output.reserve(input.size());
for (auto& myclass: input) {
    output.emplace_back(WrapperClass(myclass));
}

Я знаю, что приведенное выше не являетсяэто не очень хорошая читаемость, но это что-то вроде приведенного ниже:

vector<WrapperClass> output(input.begin(), input.end(), WrapperAllocator)

Я не совсем уверен, что должен делать распределитель, и из-за моего незнакомства с «концепциями C ++» многие издокументация идет прямо над моей головой.Может быть, это неправильный вариант использования, но вопрос действительно сводится к;

Можно ли преобразовать данные при их передаче из одного контейнера в другой? И, если возможно, как это будет сделано?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Можно ли преобразовать данные при их передаче из одного контейнера в другой?

Если ваш WrapperClass имеет конструктор, который принимает MyClass, вы можете создать другой вектор из диапазона напрямую и преобразовать ваши данные в этом конструкторе, например:

#include <iostream>
#include <vector>

struct MyClass
{
    int x;
    MyClass(int x) : x{ x } {}
};

struct WrapperClass
{
    int x;
    WrapperClass(MyClass const &mc) 
    {
        x = mc.x + 10;
    }
};


int main()
{
    std::vector<MyClass> v1 = { 1,2,3,4 };
    std::vector<WrapperClass> v2(v1.begin(), v1.end());


    //test
    for (auto wc : v2)
        std::cout << wc.x << std::endl;

    return 0;
} 

Demo: https://ideone.com/6MFd2s

11
12
13
14
0 голосов
/ 25 мая 2018

Вы можете использовать std::transform и std::back_inserter:

std::transform( input.begin(), input.end(), std::back_inserter( output ),
   []( const MyClass& c ){ return WrapperClass(c); } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...