如何[动态?]使用' i'来声明数组?元素数量?
答案 0 :(得分:2)
通过使用标准库的容器,最常见的是std::vector<>
。
其他解决方案包含手动分配和内存释放,可能不值得付出努力。
答案 1 :(得分:1)
您可以使用std::vector<T>
。它就像
std::vector<int> a;
a.push_back(2); // add 2 to the array
a.push_back(4);
你可以继续,你不必担心内存分配问题。
答案 2 :(得分:1)
你必须使用指针。 示例:
float *ptrarray = new float [10];
基本上,输入* pointername = new type [i];
不要忘记清理记忆:
delete [] ptrarray;
或者在程序结束前保留。
答案 3 :(得分:1)
创建动态大小的数组
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()
以获取元素数量iterator
和v.begin()
v.end()
执行迭代
只需使用std::vector
即可。如果您需要对基础指针的原始访问权限,请使用&v[0]
或v.data()
但不要这样做,除非您需要。另外,不要将std::auto_ptr
用于数组。你会受到诱惑,但不要这样做。