Written on
·
290
·
Edited
1
빨리 교안마무리하고싶은데 마음과 달리 잘 안되네요 ㅠㅠ 그래도 어렵다고 소문난 cpp를 배우고 있다는것에 감사합니다
제가 막히는 코드는 이러합니다.
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int main () {
for(int i = 1; i <= 5; i++){
v.push_back(i);
v.push_back(i);
}
for(int i : v) cout << i << " ";
cout << '\n';
// 중복되지 않은 요소로 채운 후, 그 다음 이터레이터를 반환한다.
auto it = unique(v.begin(), v.end());
//질문1. 여기서 v.begin()의 값과 v.end()값을출력하려면 어떻게 해야하나요? cout << v.begin() << '\n'; 을 해봤는데 되지 않더라구요
//질문2. v의 첫번째 값과 마지막값이 1과 5 아닌가요? v.begin() 과 v.end() 대신 1 과 5 를 어봤는데 에러가 났습니다
// 질문3. auto it 대신 int it 과 vector<int> it 을 넣어봤는데 에러가 납니다. 정확한 타입을 알고싶어서 cout << typeid(it).name() << '\n' 을 했었는데 에러는 아니지만 'N9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEE' 가 출력되었습니다. 어떻게하면 타입을 확인할수 있을까요?
cout << it - v.begin() << '\n';
//질문 4. it-v.begin() 을 왜 하는지와 출력값이 왜 5인지 이해가되지 않습니다..
// 앞에서 부터 중복되지 않게 채운 후 나머지 요소들은 그대로 둔다.
for(int i : v) cout << i << " ";
cout << '\n';
return 0;
}
Answer 1
1
안녕하세요 ㅎㅎ
//질문1. 여기서 v.begin()의 값과 v.end()값을출력하려면 어떻게 해야하나요? cout << v.begin() << '\n'; 을 해봤는데 되지 않더라구요
>> begin이나 end는 이터레이터를 반환합니다. 그래서 출력이 그대로는 안됩니다. 교안 - 이터레이터 설명 참고 부탁드립니다.
//질문2. v의 첫번째 값과 마지막값이 1과 5 아닌가요? v.begin() 과 v.end() 대신 1 과 5 를 어봤는데 에러가 났습니다
>> 무슨 말씀인가요? 1과 5를 넣어본 코드를 질문에 다시 올려주실 수 있으실까요?
// 질문3. auto it 대신 int it 과 vector<int> it 을 넣어봤는데 에러가 납니다. 정확한 타입을 알고싶어서 cout << typeid(it).name() << '\n' 을 했었는데 에러는 아니지만 'N9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEE' 가 출력되었습니다. 어떻게하면 타입을 확인할수 있을까요?
>> 정확한 타입은 "해당 자료형의 이터레이터"입니다.
예를 들어볼까요?
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> a;
for(int i = 0; i < 10;i++){
a.push_back(i);
}
for(vector<int>::iterator it = a.begin(); it != a.end(); it++){
cout << *it << "\n";
}
}
/*
0
1
2
3
4
5
6ㅇ
7
8
9
*/
cout << it - v.begin() << '\n';
//질문 4. it-v.begin() 을 왜 하는지
>> 이터레이터는 주소값을 반환합니다. 저걸 꼭 해야 하는 이유는 없지만 몇번째까지인 것을 출력하기 위해서 하는 것입니다.
그니까 음.. 주소값이 설정될 때 1000정도로 설정되었다고 해봅시다. 여기서 1, 2, 3, 400, 100이 할당이 되면
1001, 1002, 1003, 1004, 1005 이런 식의 주소에 값이 할당이 되는 것이죠.
자, 여기서 100이 몇번째인지를 확인하려면 1005 - 1001을 해서 아 4번째임을 확인할 수 있습니다.
1 2 3 4 5 3 4 4 5 5
유니크를 돌린 배열의 값입니다.
유니크함수는 유니크하게 만들고 유니크한 배열 그 다음의 이터레이터를 반환합니다.
즉,
1 2 3 4 5 3 4 4 5 5
이 숫자에서
1 2 3 4 5 3 4 4 5 5
3이라는 숫자 위치를 반환합니다. 즉, 5번째인 것이죠.
와 출력값이 왜 5인지 이해가되지 않습니다..
>> 위에 설명드렸습니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
감사합니다.
강사 큰돌 올림.