如何使数组表现得像向量

How to make arrays behave like vectors?

本文关键字:向量 何使 数组      更新时间:2023-10-16

我想要一个初始大小为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;
}

在给定下列值后进入数组:

123.45678891011121315

我得到以下输出(使用display()函数)


12
3
4
0[(此值取决于编译器)#错误输出]
6
7
8
1[(此值取决于编译器)#错误输出]
10
11
12
13
14
15

我不知道为什么我在数组更新后输入的元素得到随机值(大小翻倍),以及我应该如何修复它。

向量,本质上只是动态分配的数组。我的问题是为什么不首先使用一个有4个槽的向量。std::vector<int>(4);可以做到这一点,但如果你坚持要重新构建向量类,研究动态数组的主题,并基于它们创建一个c++模板类。根据我的理解,.append()释放vector中的所有元素,然后将它们与末尾的额外元素重新分配。

网上有很多文章都是人们试图完成类似的任务,只要稍微挖掘一下:

http://www.gamedev.net/topic/528822-c-writing-my-own-vector-class/https://codereview.stackexchange.com/questions/50975/creating-a-custom-vector-class