inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

항상 감사합니다 unique() 함수 질문있습니다

305

나도한

작성한 질문수 4

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;

}

 

 

C++ 코테 준비 같이 해요!

답변 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인지 이해가되지 않습니다..

>> 위에 설명드렸습니다.

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

감사합니다.

강사 큰돌 올림.

1-E질문입니다!

0

518

2

3-L 틀린 부분 피드백 부탁드립니다.

0

821

2

1-A문제 순열재귀함수 질문입니다.

0

385

1

1-A 일곱난쟁이문제입니다

0

456

1

문제 풀 때 방향성에 대해

0

801

1

맥에서 vs code로 실행 관련 질문입니다

0

523

1

17071번 메모리 초과

0

386

1

1-C질문입니다!

0

421

2

2-B BFS 시간초과질문

0

630

2

1-O 13번 라인

0

442

1

6-J 놀이공원 문제 질문

0

381

1

구현관련 질문

0

484

1

강의 교안

0

319

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

545

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

536

1

1-K

0

473

2

3-G번 질문있습니다.

1

473

3

3-C 실행 시간 질문드립니다.

0

494

1

4-A 문제 풀이 질문있습니다.

0

590

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

435

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

334

1

3-O go 함수 질문 드립니다.

1

447

2

4-A 출력 질문

0

305

1

1주차 1-O 질문드립니다

0

259

1