Просто сделайте их одинакового размера и используйте std::transform
:
const auto sizeOfResult = std::max( poly1.size(), poly2.size() );
poly1.resize( sizeOfResult );
poly2.resize( sizeOfResult );
vector<int> result(sizeOfResult);
std::transform( poly1.begin(), poly1.end(), poly2.begin(), result.begin(),
[]( int a, int b ) { return a+b; } );
, это простое решение, но с небольшими накладными расходами.Более эффективное решение:
auto p = poly1.size() < poly2.size() ? std::tie( poly1, poly2 ) : std::tie( poly2, poly1 );
std::vector<int> result( std::get<1>( p ) );
for( size_t i = 0; i != std::get<0>( p ).size(); ++i )
result[i] += std::get<0>( p )[i];
живой пример