在C++中增加数组的大小而不使用矢量

我正在为学校进行任务,我们需要在不使用矢量的情况下动态增加数组的大小。 这是我有,但它不断清除这两个列表。在C++中增加数组的大小而不使用矢量

string name; 

int numOfClasses = 1;

string *listOfCourses = new string[numOfClasses];

string studentclasses;

void addToList(string n,int i) {

numOfClasses++;

string *copyOfListOfCourses = new string[numOfClasses];

memcpy(copyOfListOfCourses, listOfCourses, numOfClasses + 1);

copyOfListOfCourses[i] = n;

delete[] listOfCourses;

listOfCourses = copyOfListOfCourses;

}

回答:

memcpy(copyOfListOfCourses, listOfCourses, numOfClasses + 1); 

memcpy()是一个C库函数,什么都不知道关于C++类,它们的构造函数和析构函数。它不能用于复制包含std::string的数组。 memcpy()还有至少两个其他问题,除了它首先不能用于std::string

正确的方法是使用C++算法std::copy或使用手动for循环。

#include <algorithm> 

std::copy(listOfCourses, listOfCourses+(numOfClasses-1),

copyOfListOfCourses);

注意numOfClasses在这一点上是新的数组,这比现有的数组的大小一个更大的尺寸,所以正确的计算必须减 1从numOfClasses,得到的尺寸现有的阵列,而不是加1

另一个问题是这样的:

copyOfListOfCourses[i] = n; 

而不只是复制整个现有阵列到新的,由于是,真正那么一定会发生是另一个拷贝以移动调整大小的数组中的所有值,从索引#i处的现有值开始增加1,为新值腾出空间。这将是第二个std::copy()电话,您现在应该可以自己弄清楚。

回答:

您可以创建一个新数组,将旧元素复制到新数组,然后用新数组替换旧数组。显然,使用指针。

假设你有一个指向名为arrint阵列,动态内存中创建:

int *arr = new int[3]; 

arr[0] = 1;

arr[1] = 2;

arr[2] = 3;

而且要调整其大小,例如存储4个元素。

您将创建一个指向与新的大小命名tempint阵列:

int *temp = new int[4]; 

现在老元素复制到新数组:

for (int i = 0; i < 3 ; i++) // 3 for the size of the old array 

{

temp[i] = arr[i]; // copy the elements

}

现在你可以删除旧内存和arr到新内存:

delete[] arr; 

arr = temp;

现在你可以这样做:

arr[3] = 4; 

回答:

试试这个

#include<iostream> 

#include<string.h>

using namespace std;

int *a;

int nCurrentSize =0;

void pushBack(int n)

{

if(0 == nCurrentSize)

{

a= new int[1+nCurrentSize];

a[nCurrentSize] = n;

nCurrentSize++;

}

else

{

int *tmp = new int[nCurrentSize];

memcpy(tmp,a,nCurrentSize*sizeof(int));

delete []a;

a= new int[1+nCurrentSize];

memcpy(a,tmp,nCurrentSize*sizeof(int));

a[nCurrentSize] = n;

delete []tmp;

nCurrentSize++;

}

}

void display()

{

for(int i=0;i<nCurrentSize; i++)

cout<<a[i]<<",";

}

int main()

{

pushBack(91);

pushBack(5);

pushBack(3);

pushBack(7);

pushBack(1);

pushBack(3);

pushBack(2);

pushBack(2);

pushBack(0);

pushBack(5);

display();

cout<<endl<<nCurrentSize;

}

以上是 在C++中增加数组的大小而不使用矢量 的全部内容, 来源链接: utcz.com/qa/260244.html

回到顶部