С++ пытается заменить значения в векторе
Это моя функция подкачки:
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
Ответы
Ответ 1
Я думаю, что вы ищете iter_swap
, который вы также можете найти в <algorithm>
.
все, что вам нужно сделать, это просто пройти два итератора, каждый из которых указывает на один из элементов, которые вы хотите обменять.
поскольку у вас есть позиция этих двух элементов, вы можете сделать что-то вроде этого:
// assuming your vector is called v
iter_swap(v.begin() + position, v.begin() + nextPosition);
// position, nextPosition are the indices of the elements you want to swap
Ответ 2
Обе предлагаемые возможности (std::swap
и std::iter_swap
) работают, у них просто немного другой синтаксис.
Пусть 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
Ответ 3
Существует std::swap
в <algorithm>
Ответ 4
после прохождения вектора ссылкой
swap(vector[position],vector[otherPosition]);
приведет к ожидаемому результату.