2013-06-19 2 views
0

그 질문에 따르면, 나는 내 프로젝트의 메모리 관리에 대해 점점 더 걱정하고 있으며 배열 메모리 중 하나에 충돌이있을 때 프로그램이 중단됩니다. this posted question배열 정의를 벡터 또는 목록으로 변경 하시겠습니까?

서로 다른 대답은 내가 벡터 내 배열을 변경할 것이라는 사실을 수렴하고 내 배열의 일부는 다음과 같이 정의된다 :

에 각 하나를 변경하는 방법을

#define Nb 50 
int position[Nb]; 
double indication[Nb]; 
double sum[Nb]; 

std::vector 
std::list? 

선언을 변경하는 경우 (예 : 오름차순으로 정렬하거나 값 중 하나를 덮어 쓸 때) 조작/처리 할 수 ​​있습니까? 다음과 같이

+2

'T x [N];'은 std :: vector x (N);'이됩니다. 목록을 사용하지 마십시오. –

+0

참고 : C++ 14 [std :: dynarray] (http://en.cppreference.com/w/cpp/container/dynarray)를 참조하십시오. 그러나 당신의 예제와 비슷한 것은'std :: array '입니다. – juanchopanza

답변

2

, 런타임 은 공사 후에 변경할 수 있습니다. 크기 런타임에 결정될 수 있지만, 건축 후 변경되지 수있는 동적 크기 배열이다

int n; 
std::cin >> n; 
std::vector<int> v(n); // vector has n value constructed ints 
v.push_back(42); // v has n+1 ints now. 

C++ 14 이벤트 std::dynarray.

+0

감사합니다. 그리고 그 선언을 사용할 때 값의 조작/할당은 동일합니다. 즉, 예를 들어, position [0] = 0 및 position [2] = 4를 쓰겠습니까? – MelMed

+0

@MelMed 그렇습니다. 컨테이너가 반복자를 제공하기는하지만 정확히 같습니다.이 경우에는 C 스타일 배열의 요소에 대한 포인터와 매우 유사합니다. – juanchopanza

+0

그러나 예를 들어 memcopy와 memset이 해당 유형에서 작동하지 않는 것처럼 보입니다. 그렇게하는 방법? – MelMed

1

이 구문은 다음과 같습니다

#define Nb 50 
std::vector<int> position(Nb); // create std::vector holding ints, Initial size is 50 

또한 #define을 사용 자제해야하지만, 오히려 const를 사용,이 C++ 더 :

const int Nb = 50; //maybe wrap Nb in a namespace 
std::vector<int> position(Nb); 

vector와 생성자를 참조하십시오.

std::array<int, 50> position; 

std::vector 크기에서 측정 할 수있는 동적 크기의 배열입니다 :

#define Nb 50 
int position[Nb]; 

이들에 현대 C++ 대안 std::array하지 std::vector 당신이 고정 크기 배열을 사용하는