【发布时间】:2020-12-13 10:24:33
【问题描述】:
我有这个递归函数,它不会编译在向量连接行给出错误。
vector<int> binaryInsert(vector<int> subArray, int subArraySize, int nextVal) {
if(subArraySize == 1)
{
if(nextVal >= subArray[0]) subArray.insert(subArray.begin()+1, nextVal);
else subArray.insert(subArray.begin(), nextVal);
return subArray;
}
else if(subArraySize == 2)
{
if(nextVal >= subArray[0]) {
if(nextVal >= subArray[1]) subArray.insert(subArray.begin()+2, nextVal);
else subArray.insert(subArray.begin()+1, nextVal);
}
else subArray.insert(subArray.begin(), nextVal);
return subArray;
}
else
{
if(subArraySize%2 == 1)
{
int halfPoint = (subArraySize-1)/2;
vector<int> leftSubArray(subArray.begin(), subArray.begin()+halfPoint);
vector<int> rightSubArray(subArray.begin()+halfPoint, subArray.end());
vector<int> newVec;
if(nextVal <= leftSubArray[halfPoint-1]) {
newVec = binaryInsert(leftSubArray, halfPoint, nextVal);
return newVec.insert(newVec.end(), rightSubArray.begin(), rightSubArray.end());
}
else
{
newVec = binaryInsert(rightSubArray, halfPoint+1, nextVal);
return leftSubArray.insert(leftSubArray.end(), newVec.begin(), newVec.end());
}
}
else
{
int halfPoint = (subArraySize)/2;
vector<int> leftSubArray(subArray.begin(), subArray.begin()+halfPoint);
vector<int> rightSubArray(subArray.begin()+halfPoint, subArray.end());
vector<int> newVec;
if(nextVal <= leftSubArray[halfPoint-1]) {
newVec = binaryInsert(leftSubArray, halfPoint, nextVal);
return newVec.insert(newVec.end(), rightSubArray.begin(), rightSubArray.end());
}
else
{
newVec = binaryInsert(rightSubArray, halfPoint, nextVal);
return leftSubArray.insert(leftSubArray.end(), newVec.begin(), newVec.end());
}
}
}
}
线return newVec.insert(newVec.end(), rightSubArray.begin(), rightSubArray.end());
给出以下错误。
无法转换 'newVec.std::vector::insert<:__normal_iterator std::vector> >(__gnu_cxx::__normal_iterator
(newVec.std ::vector::end()), rightSubArray.std::vector::begin(), rightSubArray.std::vector::end()' from 'std::vector::iterator {aka __gnu_cxx::__normal_iterator}' 到 'std::vector'
return leftSubArray.insert(leftSubArray.end(), newVec.begin(), newVec.end()); 也一样。
我确信我用于向量连接的方法是最可靠和更好的方法,但我无法弄清楚导致错误的原因。我在这里做错了什么吗?
【问题讨论】:
标签: c++ vector c++14 concatenation