Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我试图增加和减少数组的大小_C++_Arrays_New Operator - Fatal编程技术网

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

C++ 我试图增加和减少数组的大小,c++,arrays,new-operator,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++)

我试着做家庭作业,基本上就是这样。首先,我尝试将数组的大小增加一倍(从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;
int size=5;
保持大小的国王=大小;
字符串*arr=新字符串[大小];
尺寸=尺寸+5;
字符串*arr2=新字符串[大小];
对于(int i=0;i
在你告诉我向量可以使用之前,我知道。我只是按照指示去做。但是我做得对吗?如果我不是,我能改进什么,以及。如果我做对了,我怎么能测试它呢?也许有名字?我不知道怎么做

谢谢大家!

说明如下:

  • 声明指向字符串对象的指针
  • 创建一个包含5个元素的数组(这里我们假设值放在数组的元素中)
  • 创建一个比第一个数组大一倍的数组,并在其上使用帮助指针
  • 从旧阵列复制到新阵列(使用for循环)
  • 删除旧数组
  • 将主指针移动到新数组

  • 看起来不错!不过,如果你的家庭作业要求你将尺寸增加一倍,最好写下:“尺寸=尺寸*2”

    行“arr=arr2”也没有任何作用,因为您已经删除了变量arr:)

    下面的解释:(我不能评论,因为我没有足够的声誉)

    此行声明指向字符串对象的指针。
    *
    前面的
    *一个_pt
    使其成为一个指针;如果它是一个正态变量,那么它就是
    a\u pt
    。它还创建一个大小为5的数组,因为它在[]方括号内使用变量
    size

        cout<<size<<endl;
    
    此行在每个元素中用“Aa”填充数组,因此
    a_pt=[Aa,Aa,Aa,Aa,Aa]

            cout<<a_pt[i]<<" ";  //Proveing size of 5
    
    这部分让我困惑,你可以写
    size\u 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
        }
    

    coutI投票结束这个问题,因为这个代码属于@Barry:所以对于有已知问题的代码来说是很好的,他知道他的问题是什么——没有测试。我在这个问题上支持@BenVoigt。@Tariknaej关于“只是遵循说明”——如果我看不到你的说明,我不知道你是否做对了。代码中的某些内容不好;不过,如果它们不与说明相矛盾的话,它们可能还可以。为了让人们回答这一部分,请发布说明。@anatolyg我刚刚做了,谢谢:)通过“arr=arr2”我正在尝试(请注意,我是从瑞典语翻译过来的)将主指针移动到新数组。它是这样做的吗?不,不是:)我不确定你是否理解指针,指针是一个保存内存地址的变量,而不是一个普通变量,你必须获取内存地址,然后获取值
    我不完全理解您所说的“将主指针移动到新数组”是什么意思,您不需要将任何内容移动到新数组,当您开始使用
    arr2
    而不是
    arr
    arr
    时,程序将自动转到新数组,行
    arr=arr2
    使指针
    arr
    指向
    arr2
    指向的同一内存块。指针是正常变量。只是他们所持有的数据代表一个地址(而不是一个字符串或数字)。你是最棒的,没有什么能让你失望!也谢谢你,我现在明白了:)
            cout<<a_pt[i]<<" ";  //Proveing size of 5
    
        }
    
        for (int o = 0; o <size_2; o++)
        { size+=1; } //Increasing size to 10.
    
        size_2 = size; 
    
        cout<<endl<<size<<endl;
    
        for (int g = 0; g < size_2; g++)
        { 
            a_pt[g] = "Bb";
            cout<<a_pt[g]<<" ";     //Proving size of 10
        }