如何使数组表现得像向量
How to make arrays behave like vectors?
我想要一个初始大小为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
相关文章:
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- C++ 运算符"="重载 - 在 lhs 上获取向量中的所有值,使其等于 rhs 上的双精度值
- C++使用以向量作为值的地图
- 如何创建一个向量,使每个框都是链列表的头部
- 在lambda中捕获各种向量使元素const
- 如何使操作员=向量类中
- 创建一个在到达末尾时使内存大小加倍的向量类?
- 在 2D 向量中从每一行添加最大元素,以使行元素 $A_i$ 小于 $A_(i+1)$
- 将 boost odeint 与 std::map 和自定义向量空间代数一起使用时,没有可行的重载'='
- C 如何使2D向量函数
- 如果必须在同一向量上写入线程,是否可以使用线程
- 按类使对象的向量
- 为什么当对象std ::向量被声明但从未使用时,编译器不会发出警告
- 计算向量::empty()正在使程序崩溃
- 如何使字符串数组存储在向量中
- 如何使类在向量内可搜索?
- 将 at() 与自定义对象的向量一起使用时的分割错误
- 处理大向量会使程序崩溃并带有bad_alloc
- 在稳定向量中使用项的地址
- 比较两个向量,使它更有效