這是我的交換功能:C++想在矢量交換價值
template <typename t>
void swap (t& x, t& y)
{
t temp = x;
x = y;
y = temp;
return;
}
這是我的功能(在側附註五店字符串)調用交換值,但每當我嘗試使用值調用在向量中,我得到一個錯誤。我不確定我做錯了什麼。
swap(v[position], v[nextposition]); //creates errors
這是我的交換功能:C++想在矢量交換價值
template <typename t>
void swap (t& x, t& y)
{
t temp = x;
x = y;
y = temp;
return;
}
這是我的功能(在側附註五店字符串)調用交換值,但每當我嘗試使用值調用在向量中,我得到一個錯誤。我不確定我做錯了什麼。
swap(v[position], v[nextposition]); //creates errors
有一個std::swap
在<algorithm>
我想你在找什麼是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
我有這個相同的問題,並且有很多推薦std :: swap的答案(就像這裏的最高投票人一樣),但std :: swap不能直接用於交換矢量的兩個元素的內容。你的答案與std :: iter_swap一樣。 – latreides 2014-01-09 20:23:55
我很驚訝沒有人提到它。 – 2014-02-09 22:09:08
@latreides你能否澄清一下你的意思是「std :: swap無法(直接)交換一個向量的兩個元素的內容」? – 2016-01-16 06:44:25
兩個提議的可能性(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
std :: swap()對迭代器不起作用,請考慮使用std :: iter_swap(),而不是像本頁其他答案中所建議的那樣使用std :: iter_swap()。 – Mar 2016-03-12 03:57:41
@Mar Superfly建議:請注意,std :: iter_swap(it1,it2)等價於std :: swap(* it1,* it2)。所以std :: swap可以正常工作。 – leetNightshade 2016-09-16 21:07:18
後通過參考
swap(vector[position],vector[otherPosition]);
使向量會產生預期的結果。
你的錯誤是什麼? – 2011-06-03 08:43:25
你的代碼中有沒有'使用namespace std'的地方?因爲你可能有名字衝突。 – Benoit 2011-06-03 08:47:42
順便說一句你不需要'return;'語句在你的函數結尾 – 2011-06-03 09:02:35