如何声明具有可变数量的元素的数组 [C++]
How to declare an array with a variable number of elements [C++]?
如何[动态?]声明一个元素数为"i"的数组?
改用标准库的容器,最常见的是std::vector<>
.
其他解决方案包含手动分配和释放内存,可能不值得付出努力。
您可以使用
std::vector<T>
.它的工作原理就像
std::vector<int> a;
a.push_back(2); // add 2 to the array
a.push_back(4);
你可以继续说下去,你不需要担心内存分配问题。
你必须
使用指针。例:
float *ptrarray = new float [10];
基本上,类型 * 指针名称 = 新类型 [i];
并且不要忘记清理您的记忆:
delete [] ptrarray;
或者它将被保留,直到程序结束。
创建一个动态大小的数组
std::size_t N = 10;
SomeType *a = new SomeType[N];
for (auto i=0; i<N; ++i) {
std::cout << a[i] << std::endl;
}
delete [] a;
C++数组是指向包含特定类型的连续内存块的指针。 此代码段为 10 个SomeType
实例的数组分配空间,构造使用默认构造函数初始化每个对象的数组,迭代数组,打印出每个元素,然后通过调用 delete []
来释放内存。
要点:
- 您需要调用
delete []
来释放数组。 需要数组窗体来确保在每个对象上调用析构函数。 - 分配后,无法恢复数组的大小。
- 您可以按索引(或指针(迭代数组
这不是做你想做的事的方法,继续阅读。
使用向量
std::size_t N = 10;
std::vector<SomeType> v(10);
for (auto iter=v.begin(); iter!=v.end(); ++iter) {
std::cout << *iter << std::endl;
}
此代码段使用std::vector
为您管理连续的内存块。 请注意使用迭代器遍历向量而不是使用索引。 向量确实支持直接索引,因此上一示例中使用的 for
循环也可以在此处工作。
for (auto i=0; i<v.size(); ++i) {
std::cout << v[i] << std::endl;
}
使用迭代器是最佳实践和惯用语,尽管使用 for
循环可能不是,但我跑题了。
要点:
- 在
- 向量的情况下,内存管理是自动的
- 您可以使用
push_back
追加 - 向量知道其中有多少个元素——调用
v.size()
来获取元素的数量 - 使用从
v.begin()
返回的iterator
s 执行迭代,v.end()
只需使用std::vector
. 如果需要对基础指针的原始访问权限,请使用 &v[0]
或 v.data()
,但除非需要,否则不要这样做。 此外,不要将std::auto_ptr
用于数组。 你会很想这样做,但不要这样做。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀