我试图增加和减少数组的大小

时间:2015-01-25 16:19:56

标签: c++ arrays new-operator

我试图做我的作业,基本上就是这样。首先,我尝试将数组的大小加倍(从5到10)然后我尝试将其大小减少一个元素。

这就是我所做的。

int size = 5;
int theKingOfKeepingSizes = size;
string *arr = new string[size];

size = size + 5;

string *arr2 = new string[size];


for (int i = 0; i < theKingOfKeepingSizes; i++)
{
    arr2[i] = arr[i];
}

delete[] arr;

arr = arr2;

int newsize = size - 1;
string *arr3 = new string[newsize];

for (int i = 0; i < newsize; i++)
{
    arr3[i] = arr2[i];
}

delete[] arr2;

arr2 = arr3;

在你告诉我vector可以使用之前,我知道。我只是按照说明。我做得对吗?如果我没有,我可以改进什么,和。如果我做得对,我怎么能把它测试?可能有名字?我不确定如何做到这一点。

谢谢!

说明如下:

  1. 声明指向string-objekt的指针。
  2. 创建一个包含5个元素的数组(这里我们假设值放在数组的元素中)
  3. 创建一个与第一个大小相同的数组,并在其上使用帮助指针
  4. 从旧数组复制到新数组(使用for循环)
  5. 删除旧数组。
  6. 将主指针移动到新数组。

2 个答案:

答案 0 :(得分:1)

在下面解释Andy's code :(我无法发表评论,因为我没有足够的声誉)

int main() 
{
    int size = 5;
    int size_2 = size;

    string *a_pt = new string [size]; //Intial size of 5.

此行声明一个指向字符串对象的指针。 *之前的*a_pt使其成为指针;如果它是一个普通变量,它只是a_pt。它还会创建一个大小为5的数组,因为它使用[]方括号内的变量size

    cout<<size<<endl;

此行用于调试。 cout表示控制台输出。而endl表示行尾。这两者之间的任何内容都将在控制台窗口中打印出来。在这里,size将打印出来,因此您应该在控制台窗口中看到数字5。

要使cout生效,您必须在#include <iostream>之前在文件顶部写int main()

    for (int i = 0; i <size_2; i++)
    {
        a_pt[i] = "Aa";

这一行用&#34; Aa&#34;填充数组。在每个元素中a_pt = [Aa, Aa, Aa, Aa, Aa]

        cout<<a_pt[i]<<" ";  //Proveing size of 5

此行打印出a_pt的每个元素,因此&#34; Aa&#34;应该打印5次。

    }

    for (int o = 0; o <size_2; o++)
    { size+=1; } //Increasing size to 10.

    size_2 = size; 

这部分让我感到困惑,而不是你可以写size_2 = size*2;

    cout<<endl<<size<<endl;

    for (int g = 0; g < size_2; g++)
    { 
        a_pt[g] = "Bb";
        cout<<a_pt[g]<<" ";     //Proving size of 10
    }

就像其他for循环一样,这会将每个元素更改为&#34; Bb&#34;,然后打印出每个元素。你应该看到&#34; Bb&#34;现在打印出10次了。     }

答案 1 :(得分:-1)

看起来对我好!但是,如果你的作业要求你加倍,最好写一下:&#34; size = size * 2&#34;

线&#34; arr = arr2&#34;因为你已经删除了变量arr :)

,也没有用处