2014-09-22 3 views
1

저는 배열을 가지고 있습니다. 200 개의 멤버를, 그리고 더 작은 배열을 말하자면, 100 개의 멤버를 가정 해 봅시다. 큰 배열에 113 개의 멤버가있는 경우 전체 배열을 작은 배열에 맞출 수 없습니다. 그래서 저는 그것을 아래부터 위로 시작하여 더 작은 배열에 최대한 많이 맞추려고합니다. 어떻게해야합니까?큰 배열을 작은 배열로 축소하는 방법은 무엇입니까?

int uniq() { static int current = 0; return ++current; } 

int main() 
{ 
    int larger_array[200]; 
    int smaller_array[100]; 
    std::generate_n(larger_array, 113, uniq); 
    std::reverse_copy(std::begin(larger_array), std::end(larger_array), std::begin(smaller_array)); 
    for (int i = 0; i < 100; ++i) 
     std::cout << smaller_array[i] << "\n"; 
    return 0; 
} 
+0

현명한 한계가 적용된 상태에서'std :: copy' 사용. –

+0

배열 대신'std :: vector'를 사용해야합니다. 배열을 사용한다면 매우 구체적인 이유가 필요하며 그 이유가 질문에 대한 정답에 영향을 미칠 수 있습니다. 당신은 정말로 무엇을하고 싶습니까? –

답변

0

당신이 larger_array의 마지막 100 요소가이 일을해야 역순으로 복사하려는 알고 있다면. 코드와 유일한 차이점은 std::prev()을 사용하여 첫 번째 반복기를 얻는 것입니다.

std::reverse_copy(std::prev(std::end(larger_array), 100), std::end(larger_array), std::begin(smaller_array)); 
1

사용 std::copy, 뭔가 같은 :

std::copy(std::begin(largerArray), std::begin(largerArray) + 
    (std::end(smallerArray) - std::begin(smallerArray)), 
    std::begin(smallerArray)); 
+0

이렇게하면 세그먼트 화 오류가 발생합니다. – user4068376

+0

@ user4068376 죄송합니다, 잘못 찾으십시오. 올바른 해결책으로 수정 된 답변. –

+0

@ PaulEvans : 당신은 당신의 근원지와 목적지가 거꾸로 있다고 생각합니다. – Blastfurnace

관련 문제