как я могу исправить ошибку: преобразование из 'void в нескалярный тип' std :: vector <int> запрошенный

1 shirazy [2017-10-15 16:54:00]

Я получаю ошибку:

conversion from ‘void to non-scalar type ‘std::vector<int> requested

и эта функция я получаю эту ошибку от:

   vector<int> concat(vector<int> vector1, vector<int> vector2)
{
     return vector1.insert(vector1.end(), vector2.begin(), vector2.end());
}

Я использовал функцию insert() из библиотеки алгоритмов.

c++ iterator insert vector g++


1 ответ


2 Решение Vlad from Moscow [2017-10-15 17:00:00]

insert метода возвращает итератор.

Он имеет следующую декларацию

template <class InputIterator>
iterator insert(const_iterator position, 
                InputIterator first, InputIterator last);

Интерфейс функции не логически согласован.

Либо объявить функцию следующим образом

std::vector<int> & concat( std::vector<int> &vector1, const std::vector<int> &vector2 )
{
    vector1.insert(vector1.end(), vector2.begin(), vector2.end());
    return vector1;
}

или следующим образом

std::vector<int> concat( const std::vector<int> &vector1, const std::vector<int> &vector2 )
{
    std::vector<int> result( vector1 );
    result.insert(result.end(), vector2.begin(), vector2.end());
    return result;
}