2011-05-07 2 views
0

두 가지 질문이 있습니다.벡터를 사용하여 값을 인쇄하는 방법 및 배열 끝에 값을 추가하는 방법은 무엇입니까?

1- 아래 명시된 코드에 대해 어떻게 값을 인쇄 할 수 있습니까 ???

#include <iostream> 
#include <list> 
using namespace std; 

int main() 
{ 
    int i; 
    list<int> a; 

    for(i; i<5; i++) 
    { 
     a.push_back(i); 
    } 


    system("pause"); 
    return 0; 
} 

2 정수 배열에 새 요소를 추가하려면 어떻게합니까?

int *a; 
int size = 3 
a = new int [size]; 

a[0]=0; 
a[1]=1; 
a[2]=2; 

//Now, I would like to add a new element to my array by increasing its size by one 

size += size; // new size is 4 

가 어떻게 새로운 크기로 내 배열을 사용하여 배열의 마지막에 새로운 요소를 추가 할 수 있습니다 : 예를 들어, 내가 배열하도록 있나요?

답변

1
  1. for() 루프에서 i를 0으로 초기화해야합니다.
    값을 인쇄하려면 다른 for() 루프를 만들어야하지만 목록에 요소를 추가하는 대신 cout에 인쇄하십시오. (...)
    위한

    {//
    인쇄하기를 법원

  2. }

  3. INT * B = 새로운 INT [크기 + 1];
    a를 b에 복사 한 다음 마지막 요소를 b에 추가하려면 memcpy()를 사용해야합니다.
    결국 a와 b에 대해서도 delete를 호출해야합니다.

+0

하지만 memcpy는 [POD types] (http://stackoverflow.com/questions/146452/what-are-pod-types-in-c)에서만 사용할 수 있습니다. –

2

(1)

list<int>::const_iterator it; 

for (it = a.begin(); it != a.end(); ++it) 
    cout << *it << endl; 

(2) 새로운 []와 2 어레이를 생성하고 제를 복사. 원본을 삭제하는 것을 잊지 마십시오. 또는 더 나은 방법은 배열을 제거하고 벡터를 사용하고 새 요소를 뒤로 밀면됩니다. 벡터는 자동으로 크기가 조절됩니다.

+0

+1 표준 컨테이너를 반복 할 수있는 적절한 방법 – Chad

+0

@Chad : 사실 여기에있는 * 적절한 방법은'iterator'보다는'const_iterator'를 사용하고, 접미사 대신 postfix를 사용하는 것이 었습니다. ; -] – ildjarn

+0

@ildjarn - 사실이지만이 미묘한 문제는이 수준에서 사라집니다. 어쨌든 나는 바뀔 것이다. – Duck

1

.

std::copy(list.begin(), list.end(), 
    std::ostream_iterator<int>(std::cout, "\n")); 

경우 손으로 코딩 루프하는 것은 여전히 ​​올바른 선택이 고려되어 Boost.Foreach :

BOOST_FOREACH(int i, list) { 
    std::cout << i << "\n"; 
} 

2이 사용해야하는 이유 중 하나 std 알고리즘은 for 루프를 코딩 손 안함 포인터와 배열 대신 std 컨테이너. 다른 사람이 하드 코드를 디버그하게하십시오.

int* newa = new int[newsize]; 
std::copy(a, a+std::min(newsize, size), newa); 
delete[] a; 
a = newa; 
size = newsize; 

그러나이 코드는 추가 항목을 초기화하거나 초기화하지 않은 상태로 둡니까? 이 코드는 어떤 예외 보장을 제공합니까? new을 건너 뛰고 std::vector을 신고하는 것이 좋습니다.

관련 문제