C/C++에서 뒤에서부터 loop를 도는 제일 좋은 방법


배열을 뒤에서 앞으로 접근할 건데요, 제가 짠 소스코드 말고 더 좋은 방법을 알고 싶어요

소스코드

for (int i = myArray.Length - 1; i >= 0; i--)
{
    //뭔가를 처리
    myArray[i] = 0;
}
  • 2016년 01월 15일에 작성됨

조회수 490


1 답변


좋아요
0
싫어요
채택취소하기

일반적으로는

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일 때도 컴파일이 되기 때문에 주의해서 써야 합니다.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close