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

我得到這個數組在聲明中聲明。我在類函數中動態分配了它的大小。動態改變字符串數組的大小保持內容相同

level_two = new string [size]; 

我需要改變它的大小主要是增加大小固定的內容,就像如果大小是5和我的數組是動態聲明的5大小並且在位置2和位置3一些字符串我想提高它的大小取決於尺寸的變化,其中位置2和3處的字符串也應該在那裏而沒有改變。

我該如何做到這一點?

第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

它會造成什麼區別? – 2012-03-27 11:09:46

+0

@Mat誰說它不是std :: string?此外,當使用std :: string數組時,您不必擔心內存分配問題。 – Petruza 2012-03-27 11:36:09

+0

對於數組,由於數組必須存儲在相鄰的存儲空間中,因此不能*增加大小*,因此只能在使用'new'創建時設置其大小。正如@Oli回答的那樣,你最好用std容器。 – Petruza 2012-03-27 11:38:54

回答

6

典型C++答案:

使用一個std::vector<string> 而不是做手工存儲器管理(即不使用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; 

1.或std::list或其他,根據您的要求。

+0

將level_two = tmp;將自己調整大小level_two? – 2012-03-27 11:38:51

+1

@HarisRiaz:'level_two'只是一個指針。所以'level_two = tmp'只是改變指針指向的地方。 – 2012-03-27 11:40:39

+0

@Haris不,新創建的數組* tmp *在創建時已經大小。 'level_two = tmp'只是讓level_two指向新創建的數組。 – Petruza 2012-03-27 11:41:35