我想要一个初始大小为4的数组。用户可以添加任意数量的元素(int类型)。函数append()将用于它。此外,每当数组的大小不足时,相同的函数将使其大小加倍并向其添加元素。
#include <iostream>
using namespace std;
int n = 4;
int count = 0;
void append(int *a, int k)
{
if(count == n)
{
n *= 2;
int *b = new int[n];
for(int i = 0; i < count; ++i)
{
b[i] = a[i];
}
a = b;
}
a[count] = k;
++count;
}
void display(int *a)
{
for(int i = 0; i < count; ++i)
cout << a[i] << endl;
}
int main()
{
int *array = new int[n];
char t = 'y';
int num;
while(t != 'n')
{
cout << "Enter Value: ";
cin >> num;
append(array, num);
cout << "Do you want to enter more values?(y/n): ";
cin >> t;
}
cout << "The values entered are:\n";
display(array);
return 0;
}
在输入数组后给出以下值:
1 2 3 4 五 6 7 8 8 9 10 11 12 13 15
我得到以下输出(使用display()函数)
1
2
3
4
0 [(此值取决于编译器)#Erroneous Output]
6
7
8
1 [(此值取决于编译器)#Erroneous Output]
10个
11个
12个
13个
14个
15
我不知道为什么我在更新数组之后输入的元素的随机值(大小加倍),以及我应该如何修复它。
答案 0 :(得分:0)
向量,实质上只是动态分配的数组。我的问题是为什么不只是最初使用带有4个插槽的向量。 std::vector<int>(4);
可以解决这个问题,但如果您坚持重新构建矢量类,请研究动态数组的主题并根据它们创建一个c ++模板类。根据我的理解.append()
释放向量中的所有元素,然后在末尾用额外的元素重新分配它们。
网上有许多文章是由试图完成类似任务的人创建的,只需要进行一些挖掘:
http://www.gamedev.net/topic/528822-c-writing-my-own-vector-class/ https://codereview.stackexchange.com/questions/50975/creating-a-custom-vector-class