Обе предложенные возможности (std::swap
и std::iter_swap
) работают, они просто имеют немного другой синтаксис.
Давайте поменяем местами первый и второй элемент вектора, 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 1 3 4 5 6 7 8 9