2017-11-19 18 views
-2

요소 시퀀스의 순서를 반대로하는 자체 역 알고리즘을 작성하려고합니다. 나는 'first'와 'limit'만을 사용하고 있으며, 모든 함수가 매개 변수로 가질 것입니다. 첫 번째 요소가 마지막이고 두 번째 요소가 두 번째 요소 인 순서의 순서를 뒤집는 함수를 작성할 수 있습니까? 요소를 저장하기 위해 임시 벡터를 사용하지 않으려 고합니다. 이것이 가능한가? 내 질문에 불분명 한 점이 있으면 알려주십시오. 감사합니다. 나는 C++ 11을 사용하고 있는데 이것은 내가 지금까지 가지고있는 것이다 ..별로. 임시 벡터를 사용하고 싶지 않다면 어떤 논리를 사용해야할지 모르겠습니다.내 자신의 역방향 함수를 작성하려고 시도합니다.

template<typename Iter> 
void reverse(Iter first, Iter last) 
{ 

} 


int main() 
{ 
    std::vector<int> vector = {1,2,3,4,5}; 
    std::cout << reverse(vector.begin(),vector.end()); 
} 
+2

지금까지 어떤 시도를 해봤으며 어떤 프로그래밍 언어에 대해 이야기하고 있습니까? –

+0

맨 위로 질문에 추가했습니다. 혼란스러워서 죄송합니다. – compsciman06

+0

0으로 초기화 된 함수에서 임시 변수를 사용하십시오. 첫 번째 마지막 반복자 요소를 교체 한 다음 1을 더하고 첫 번째 및 마지막 요소에서 1 위치를 뺀 다음 두 번째 및 두 번째 마지막 요소를 가리 키도록하고 왼쪽 <까지 오른쪽으로 스왑을 계속합니다. 벡터에 홀수 요소가 있는지 확인하고 왼쪽 포인터가 오른쪽과 같으면 중지합니다. –

답변

-1

std::iter_swap을 사용하면 쉽게이 작업을 수행 할 수 있습니다.

+0

downvote 할 경우 적어도 이유를 남겨주세요. – Darhuuk

0

수동으로 수행하는 방법에 대해 생각해보십시오. 테이블에 5 개의 게임 카드를 놓으십시오.

A K Q J 10 

이제 순서 변경을 원할 것입니다. 당신은 처음에는 10을, 끝에는 에이스를 원합니다. 그래서 그들을 교환 :

10 K Q J A 

을 이제 왕의 잭 교체 :

10 J Q K A 

그리고 목록이 역전을!

일반적인 알고리즘은 모든 크기의 목록에 적용됩니다. 코딩을 맡겨 둘거야.

이러한 유형의 문제를 해결하는 방법에 대한 약간의 힌트가 있습니다. 컴퓨터에서 해결하려고하지 마십시오. 대신 실제 카드 (예 : 카드)를 만들고 컴퓨터없이 문제를 해결할 방법을 생각하십시오. 얼마나 자주이 작품이 놀랍게 될 것이며, 더 자주 할수록 더 잘할 수 있습니다.

알고리즘 설계는 코딩과 관련이 없습니다. 알고리즘 설계는 문제를 해결하기위한 단계를 고안하는 것입니다. 접근 방법을 찾은 후에는 다음 코드를 작성하여 솔루션을 구현하십시오.

+0

그게 문제예요. 어떤 크기에서도 작동 할 수 있도록 노력하고 있습니다. 그런 식으로 작동 할 것이라고 확신하지 못합니다. 스왑을 사용하는 방식입니다. 고정 된 크기의 벡터에 대해 어떻게 할 것인지에 대해서는 당신이 말하는 것을 알고 있습니다. 그러나 달라지는 경우는 아닙니다. – compsciman06

+0

예. 모든 크기에서 작동하는 일반적인 알고리즘을 작성할 수 있습니다. –