2012-03-27 4 views
0
string *level_two; 

클래스에 선언 된 배열을 가져 왔습니다. 클래스 함수에서 동적으로 크기를 할당했습니다.문자열 배열 유지 내용의 크기를 동적으로 변경합니다

level_two = new string [size]; 

나는 그 크기는 주로 크기가 5이고 내 배열이 5의 크기가 동적으로 선언하고 내가 증가 할 위치 2 위치 3에서 일부 문자열이있는 경우 같은 내용을 유지 크기를 증가 변경해야 위치 2와 3에있는 문자열이 변경없이 크기에 있어야하는 크기의 변화에 ​​따라 크기가 10이됩니다.

어떻게하면됩니까?

PART II :

int temp=0; 
       temp= final_hash_index_one; 

       final_hash_index_one = sum % number_of_keys_to_be_hashed; 
       sum = 0; 
       cout<<"final_hash_index_one: "<<final_hash_index_one<<endl; 
       if(final_hash_index_one>temp) 
       { 
        string *tmp = new string[final_hash_index_one+1]; 
        std::copy(level_two, tmp, final_hash_index_one+1); 
        delete [] level_two; 
        level_two = tmp; 
       } 
       if(temp>final_hash_index_one) 
       { 
        string *tmp = new string[temp+1]; 
        std::copy(level_two, tmp, final_hash_index_one+1); 
        delete [] level_two; 
        level_two = tmp; 
       } 


       level_two = new string [final_hash_index_one+1]; 
       level_two[final_hash_index_one] = file_se_uthao; 
       tab_obj[return_structure_index].z = level_two;  
+0

차이점은 무엇입니까 ?? –

+0

@Mat 누가 std :: string이 아니라고 말합니까? 게다가 std :: string의 배열을 사용할 때 메모리 할당에 대해 걱정해야합니다. – Petruza

+0

배열을 사용하면 배열을 인접한 메모리 공간에 저장해야하므로 크기를 * 늘릴 수 없으므로 new로 생성시에만 크기를 설정할 수 있습니다. @Oli가 대답 했으므로 표준 컨테이너를 사용하는 것이 좋습니다. – Petruza

답변

6

캐 노니 컬 C++ 답 :

사용하십시오 std::vector<string>1 아니라 (즉 newdelete를 사용하지 않는) 수동 메모리 관리를하는 것보다. 예 :

std::vector<std::string> level_two(size); 

... 

level_two[0] = some_string; 

... 

level_two.resize(different_size); 

또한 완전히 명시 적으로 크기를 방지 할 수 있습니다

std::vector<std::string> level_two; 

... 

level_two.push_back(some_string); 
level_two.push_back(other_string); 
level_two.push_back(another_string); 
... 

C--와 클래스 답변 :

당신은, 새로운 배열을 만드는 데 필요한 내용을 전송합니다, 이전 항목을 삭제하십시오.

string *tmp = new string[different_size]; 
std::copy(level_two, level_two+size, tmp); 
delete [] level_two; 
level_two = tmp; 

또는 std::list 또는 기타 요구 사항에 따라 달라질 수 있습니다.

+0

은 level_two = tmp입니다. 자체가 level_two 크기를 조정할 것입니다 ??? –

+1

@HarisRiaz :'level_two'는 단지 포인터 일뿐입니다. 그래서'level_two = tmp'는 포인터가 가리키는 곳을 바꿉니다. –

+0

@Haris 아니요, 새로 만든 배열 * tmp *는 이미 만들 때 크기가 지정됩니다. 'level_two = tmp'는 level_two가 새로 생성 된 배열을 가리키게 만듭니다. – Petruza

관련 문제