C/C++에서 뒤에서부터 loop를 도는 제일 좋은 방법
조회수 4108회
배열을 뒤에서 앞으로 접근할 건데요, 제가 짠 소스코드 말고 더 좋은 방법을 알고 싶어요
소스코드
for (int i = myArray.Length - 1; i >= 0; i--)
{
//뭔가를 처리
myArray[i] = 0;
}
1 답변
-
일반적으로는
for (int i = myArray.Length; i --> 0; ) { //do something }
같이 씁니다.
그 외에도 세세하게 나누면
C++
에서는 배열과std::vector
에 접근할 때 서로 다른 방법을 써야 합니다.std::vector에 접근할 때
1. iterator로 접근 : std::reverse_iterator사용
for(std::vector<T>::reverse_iterator it = v.rbegin(); it != v.rend(); ++it) { /* std::cout << *it; ... */ }
2. 인덱스로 접근
인덱스의 타입이
size_t
가 아닌걸 주목해주세요.someVector.size()
는size_t
가 아니라size_type
타입의 값을 return 하기 때문에 이렇게 써야 합니다for(std::vector<int>::size_type i = someVector.size() - 1; i != (std::vector<int>::size_type) -1; i--) { /* std::cout << someVector[i]; ... */ }
배열에 접근할 때
1. iterator로 접근 : std::reverse_iterator 사용
for(std::reverse_iterator<element_type*> it(a + sizeof a / sizeof *a), itb(a); it != itb; ++it) { /* std::cout << *it; .... */ }
2. 인덱스로 접근
sizeof
는 항상std::size_t
타입의 값을 return 하기 때문에 여기서는std::size_t
를 쓸 수 있습니다.for(std::size_t i = (sizeof a / sizeof *a) - 1; i != (std::size_t) -1; i--) { /* std::cout << a[i]; ... */ }
근데 위의 방법은 a가 배열이 아니라 pointer일 때도 컴파일이 되기 때문에 주의해서 써야 합니다.
댓글 입력