2014-02-10 4 views
0

흥미로운 문제가 있습니다. 나는 여기서 그것을 단순화하고있다.C++에서 두 벡터 간의 요소 교환

I에 포함 된 하나의 벡터가 : 다른 벡터에 포함 된 a = { 13, 56, 76, 24} : b = { 2, 74, 16, 29} 내가 값을 교환 할

,의는 562 말을 할 수 있습니다. 그래서 난 내 배열이 원하는 : b = {56, 74, 16, 29}

a = {13, 2, 76, 24} 그래서 문제가 : 나는 push_back 내 벡터 값을 추가하고이 값은 각 벡터에 저장되는 위치 모르겠어요. 그래서 나는 벡터에있는 어딘가에를 발견하고 벡터 b 어딘가에 2가 있고 벡터 a 어딘가에 56가있다. 이 변경을 어떻게 수행 할 수 있습니까?

답변

9
  1. 사용 std::find는 요소가
  2. 스왑에게 std::iter_swap를 사용하여 요소를 발견되었다고
  3. 확인 각 벡터의 요소를 찾을 수 있습니다.

예 :

auto ita = std::find(a.begin(), a.end(), 56); 
auto itb = std::find(b.begin(), b.end(), 2); 
if (ita != a.end() && itb != b.end()) 
    std::iter_swap(ita, itb); 
+0

와우! 정말 고맙습니다! –

+0

-1 부정적인 값어치의 자세한 표시, 불필요한 근거없는 추천 'iter_swap (a, b)'보다'swap (* a, * b)'는 (1) 더 짧고 (2) 더 명확하고 (3) 알기 어렵다. 그것은 관용적 인 기본값이라는 것은 말할 것도 없습니다. –

+0

오, 그리고 더 많은 휴대용 –

0
std::vector<int>::iterator it56 = std::find(vec56.begin(), vec56.end(), 56); 
std::vector<int>::iterator it2 = std::find(vec2.begin(), vec2.end(), 2); 
if (it56 != vec56.end() && it2 != vec2.end()) { 
    *it56 = 2; 
    *it2 = 56 
    // or: std::iter_swap(it56, it2); 
}