如何使数组像向量一样?

时间:2016-11-02 06:48:08

标签: c++ arrays

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

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

1 个答案:

答案 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