动态改变字符串数组的大小保持内容相同

时间:2012-03-27 11:00:52

标签: c++

string *level_two; 

我在课堂上声明了这个数组。我在类函数中动态分配了它的大小。

level_two = new string [size];

我需要更改它的大小主要是增加保留内容的大小,比如大小是5,我的数组是动态声明为5的大小,并且在位置2和位置3有一些字符串我想增加它的大小取决于大小的变化,位置2和3处的弦也应该没有变化。

我怎样才能做到这一点?

第二部分:

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;    

1 个答案:

答案 0 :(得分:7)

Canonical C ++回答:

使用std::vector<string> 1 而不是进行手动内存管理(即不要使用newdelete)。 e.g:

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-with-classes回答:

您需要创建一个新数组,传输内容,然后删除旧数组:

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

<子> 1。或std::list或其他任何内容,具体取决于您的要求。