c++ for 문 조건식에 함수의 리턴 값을 직접 넣으면 변수에 리턴 값을 넣는 것과 왜다른가요
조회수 453회
#include <iostream>
using namespace std;
#define MAXN (100000)
int N;
int sol[MAXN + 10];
int wp, rp = 0;
int que[MAXN + 10];
void push(int d) {
if (wp < MAXN) {
que[wp] = d;
++wp;
}
}
int front() {
if (rp != wp) {
int t = que[rp];
++rp;
return t;
}
}
bool empty() {
if (rp == wp)
return true;
else
return false;
}
int end() {
if (!empty())
return que[wp-1];
}
int main() {
cin >> N;
for (int i = 0; i < N; i++)
push(i+1);
for (int j = 0; j < end() /2; j++) {
push(front());
cout<<"j" << j <<endl;
}
cout << front() << "\n";
return 0;
}
queue를 간단히 구현하여 동작시킨 코드입니다. 위의 코드를 실행 하고 4를 입력하면 queue에 1,2,3,4 순으로 쌓이고 가장 끝에 있는 값에 /2를 해서 for문을 돌리려고 하는데요 end 함수를 동작시키면 4가 나오지만 end()/2를 하면 1이 나오는 것 같습니다. 대신 end()의 값을 변수 t에 담아 t/2를 하면 2가 나와 2번 for문을 도는데 왜이런가요?
위 코드의 결과는 아래와 같습니다. 4 -> 입력 j0 2
1 답변
-
4를 입력하여 큐에 1, 2, 3, 4가 들어간 상태에선 end()가 4이지만,
push(front());
가 실행되면 front()함수에 의해 앞의 1이 빠져 나온 후, 그 값이 큐의 뒤로 들어가게 됩니다. 따라서 이제 큐의 상태는 2, 3, 4, 1이 됩니다. 이 상태에서 end()를 읽으면 반환값은 1이고, 1/2는 0이기 때문에 j가 1일 때의 for루프 조건은 1 < 0인 거짓이 되어서 for 루프를 빠져나온 것입니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력