我一直试图细分一个向量。基本上,我的目标是将初始向量(nVector)拆分为较小的向量,在这些向量上应用连续的排序。最终,将从最终排序的子向量中选择元素K.我的问题是我无法弄清楚如何从头脑中实现以下算法。
我想,在向量中的任何一点j,从该点开始向量的子向量。然而,实现它让我很难让迭代器同意,并且我得到了来自const int * const'的无效转换。到int *错误。我不知道如何处理这个问题,因为根据我的理解,迭代器必须是不变的。代码如下。
int subVectorize() {
vector<int> subVector(M);
int j = 0;
for (unsigned int z = 0; z < nVector.size(); z++)
{
vector<int>::const_iterator start = nVector.begin() + z;
vector<int>::const_iterator end = nVector.begin() + z + M - 1;
if (end <= nVector.end()){
for (vector<int>::iterator i = start; i <= end ; i++) {
subVector.at(j) = *i;
j++;
}
j = 0;
cVector[z] = sortReturn(M, K, subVector);
}
else {
end -= nVector.size();
for (vector<int>::iterator i = start; i <= nVector.end() ; i++) {
subVector.at(j) = *i;
j++;
}
for (vector<int>::iterator i = nVector.begin(); i <= end; i++) {
subVector.at(j) = *i;
j++;
}
j = 0;
cVector[z] = sortReturn(M, K, subVector);
}
}
int* finalArray = new int[N];
for(int i = 0; i <= N; i++) {
finalArray[i] = cVector[i];
}
quickSort (finalArray, 0, N);
return finalArray[0];
}