Wag*_*CDR 0 c++ vector concatenation c++14
我有这个递归函数,它不会编译在向量连接行给出错误。
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());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该行return newVec.insert(newVec.end(), rightSubArray.begin(), rightSubArray.end());
给出了以下错误。
无法转换 'newVec.std::vector::insert<__gnu_cxx::__normal_iterator<int*, std::vector > >(__gnu_cxx::__normal_iterator<const int*, std::vector >(newVec.std::vector ::end()), rightSubArray.std::vector::begin(), rightSubArray.std::vector::end()' 来自 'std::vector::iterator {aka __gnu_cxx::__normal_iterator<int*, std::vector >}' 到 'std::vector'
也一样return leftSubArray.insert(leftSubArray.end(), newVec.begin(), newVec.end());
。
我确信我用于矢量连接的方法是最可靠和更好的方法,但我无法弄清楚导致错误的原因。我在这里做的有什么问题吗?
调用std::vector::insert
返回一个iterator
,而不是修改后的vector
。因此 return 语句将尝试将 an 转换iterator
为 a vector
,从而给出您看到的编译器错误。
您可以通过简单地将 return 语句分成 2 行来解决这个问题:
newVec.insert(newVec.end(), rightSubArray.begin(), rightSubArray.end());
return newVec;
Run Code Online (Sandbox Code Playgroud)
您也需要对其他 return 语句执行类似的操作。
归档时间: |
|
查看次数: |
60 次 |
最近记录: |