-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
교안질문
22.10.29 17:00 작성 조회수 116
0
큰돌님 교안 공부중 이해가 안되는 부분들 정리하여 올립니다!
1.
#include<bits/stdc++.h>
using namespace std;
void f(vector<int> v[10]){
v[0][0] = 1000;
}
int main(){
vector<int> v[10];
v[0].push_back(100);
f(v);
for(int i : v[0]) cout << i << " ";
return 0;
}
// 1000
위 코드에서 vector<int> v[10] 꼴의 10개의 vector를 넘기는 함수가
왜 void f(vector<int>v[10] {
v[0][0] = 1000;
} 와 같이 작성되는 것인지 잘 이해가 되지 않습니다.
그리고 분명 v[0][0]에 1000의 값이 들어갔는데,
왜 v[0]의 값이 최종적으로 1000이 되는 것인지 잘 모르겠습니다. 100이 맞지 않나요?
2.
그리고 2차원 vector 코드에서
#include<bits/stdc++.h>
using namespace std;
void f(vector<vector<int>> &v){
vector<int> vv;
vv.push_back(10000);
v.push_back(vv);
}
int main(){
vector<vector<int>> v;
f(v);
for(int i : v[0]) cout << i << " ";
return 0;
}
vv[0]에 10000이라는 값이 들어가고,
이가 다시 push_back 함수에 의해 v[0]에 10000의 값으로 들어간다고 이해하면 되는걸까요?
(2차원 vector를 넘기기 위해 1차원 vector 두 개로 풀어냈다고 이해하였는데 제대로 이해한걸까요?)
3.
struct Point{
int y, x, z;
Point(int y, int x, int z) : y(y), x(x), z(z){}
Point(){y = -1; x = -1; z = -1; }
bool operator < (const Point & a) const{
if(x == a.x) {
if(y == a.y) return z < a.z;
return y > a.y;
}
return x < a.x;
}
};
위 코드에서 bool operator 대략적으로 이해는 하였는데, 정확히 a.x 가 의미하는게 무엇일까요?
또한 위 코드에서 x가 1순위 y가 2순위 z가 3순위로 정렬되는것은 알겠으나
사실상 어떤 상황이든 x가 1순위로 오름차순 정렬되지 않나요?
z, y가 1순위가 되어 오름차순 정렬이 되는 상황이 있나요?
그리고 return x < a.x; 코드를 지우고 실행시키면 에러가 나오는데 그 이유는 무엇인가요?
답변을 작성해보세요.
0
큰돌
지식공유자2022.10.31
안녕하세요 경범님 ㅎㅎ
for(int i : v[0]) cout << i << " ";
이거는 v[0]의 요소들을 탐색한다는 의미죠? v[0][0].. v[0][1]..을 탐색한다는 뜻이기 때문입니다.
이차원 벡터 v 생성
- 벡터 안에 벡터가 있는 구조체입니다.
일차원 벡터 vv에
10000을 넣고
이 벡터를 v에 넣는다. 라는 의미입니다.
사실상 어떤 상황이든 x가 1순위로 오름차순 정렬되지 않나요?
예를 들어 a와 b가 벡터에 들어가있고 정렬을 한다고 해볼게요.
A.x = 1 b.x = 1입니다.
그러면 두개의 x가 같기 때문에 y, z의 정렬순서로 정렬되게 됩니다.
그리고 return x < a.x; 코드를 지우고 실행시키면 에러가 나오는데 그 이유는 무엇인가요?
If x != a.x를 처리하는 로직이 없어서 에러가 발생되는 것이에요.
답변 1