これは私のスワップ関数です:
template <typename t>
void swap (t& x, t& y)
{
t temp = x;
x = y;
y = temp;
return;
}
そして、これは値をスワップするための関数です(サイドノートvに文字列を保存します)が、ベクトル内の値を使用して呼び出すとエラーが発生します。何が間違っているのかわかりません。
swap(v[position], v[nextposition]); //creates errors
あなたが探しているのは iter_swap
で、これは<algorithm>
にもあります。
する必要があるのは、交換したい要素の1つをそれぞれ指す2つの反復子を渡すだけです。
2つの要素の位置があるので、次のようなことができます。
// assuming your vector is called v
iter_swap(v.begin() + position, v.begin() + next_position);
// position, next_position are the indices of the elements you want to swap
提案された両方の可能性(std::swap
およびstd::iter_swap
)動作しますが、構文はわずかに異なります。ベクトルの最初と2番目の要素、v[0]
およびv[1]
。
オブジェクトの内容に基づいて交換できます:
std::swap(v[0],v[1]);
または、基礎となるイテレーターに基づいてスワップします。
std::iter_swap(v.begin(),v.begin()+1);
それを試してみてください:
int main() {
int arr[] = {1,2,3,4,5,6,7,8,9};
std::vector<int> * v = new std::vector<int>(arr, arr + sizeof(arr) / sizeof(arr[0]));
// put one of the above swap lines here
// ..
for (std::vector<int>::iterator i=v->begin(); i!=v->end(); i++)
std::cout << *i << " ";
std::cout << std::endl;
}
どちらの場合も、最初の2つの要素が交換されます:
2 1 3 4 5 6 7 8 9
std::swap
in <algorithm>
参照でベクトルを渡した後
swap(vector[position],vector[otherPosition]);
期待される結果が得られます。