저는 C++ 11과 STL 라이브러리에 대해 아주 많이 배우고 있습니다. 난 내가 마지막 warr_temp = warr;
을 복사하는 3 벡터와 1 개 벡터를 복용하고이 코드에서 무엇을하고 무엇을 같이하는 코드,std :: distance()는 어떻게 작동합니까?
#include <bits/stdc++.h>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void Print(const vector<int> &arrays)
{
for (int x : arrays) cout << x << ' ';
}
int main() {
int citys, cityPairs, fv, lv, w;
vector <int> fvarr;
vector <int> lvarr;
vector <int> warr;
vector <int> warr_temp;
vector <int> disjoint_pairs;
scanf("%d%d", &citys, &cityPairs);
for(int nr = 0; nr < cityPairs; nr++){
scanf("%d%d%d", &fv, &lv, &w);
fvarr.push_back(fv);
lvarr.push_back(lv);
warr.push_back(w);
warr_temp = warr;
}
for (int j = 0; j < citys; j++){
auto result = min_element(begin(warr_temp), end(warr_temp));
auto pos_temp = distance(begin(warr_temp), result);
cout << pos_temp;
auto pos = distance(begin(warr), result);
cout << pos;
disjoint_pairs.push_back(fvarr[pos]);
disjoint_pairs.push_back(lvarr[pos]);
warr_temp.erase(warr_temp.begin() + pos_temp);
}
// Print(disjoint_pairs);
}
입니다 작성했습니다. 그런 다음 벡터 warr_temp
의 최소값을 확인하고 그 인덱스를 pos_temp
에 저장하고 난 다음 벡터의 최소값 인덱스를 warr
에서 pos
으로 저장합니다.
이제 문제는
-61-62-63-64
왜 이런 일이, pos_temp
나에게 올바른 값 만 pos
나에게 이런 식으로 출력 무언가를주고 두 번째를주고 첫 cout
입니까? 이 숫자들은 뭐야? 그들은 포인터입니까? 나는 거리가 하나의 템플릿이라는 것을 알고 있으므로 이것을 구현하는 올바른 방법은 무엇입니까?
누군가가 내 도움을 청할 수 있다면 매우 도움이 될 것입니다. 미안하다면 바보 같은 질문 !!!
하이 로스트, 나는 그것의 " '이런 식으로 나에게 연산자 <<' ''에 대한 일치를 '오류가 제공되지 않는 방법을 사용했다
이 줄 "cout << pos;" . 그러나 만약 내가 "이 같은 책자 << * pos"다음 인덱스를 인덱스가 아니라 인덱스에있는 번호를 제공하고 있습니다. – Proloy@Proloy 업데이트 된 답변보기. 'std :: find'는 iterator를 제공합니다. 인덱스를 얻기 위해'std :: distance'를 적용해야합니다. – Rost
고쳐 주셔서 고맙습니다 !! – Proloy