具有未知大小的C++数组
C++ arrays with unknown size
我正在尝试实现一个程序,该程序为您提供一个具有确定的开始、结束和基础的序列,问题是我无法确定的元素数量
这是我为一个简单的算术级数生成器编写的代码
float Arithmetic_squence[](float start, float end, float b) {
float result[];
float last_number = start;
while (last_number <= (end - b)) {
result[sizeof(result)] = last_number;
last_number += b;
}
}
它不会编译,因为它想要一个大小的
我还希望代码尽可能简单,这样我就不必实现一个低效、耗时的链表
我也不知道如何处理矢量,也许如果有一个快速指南,我可以使用它
是的,使用std::vector
,运行时可调整大小数组的标准库实现:
vector<float> Arithmetic_squence(float start, float end, float b) {
vector<float> result;
float last_number = start;
while (last_number <= (end - b)) {
result.push_back(last_number);
last_number += b;
}
return result;
}
名为result
的vector
从空开始,每次执行push_back
时都会添加元素。
您可以使用size()
成员函数获取向量中的元素数量
vector<float> f = Arithmetic_squence(x, y, z);
for (int i = 0; i < f.size(); ++i)
cout << f[i] << endl;
当您学习标准库的来龙去脉(迭代器、算法等)时,vector
将成为一个非常强大的工具;看见http://en.cppreference.com/w/cpp/container/vector参考std::vector
,以及http://en.cppreference.com/w/cpp/用于通用C++标准库参考,最新的C++11标准。
在这种情况下最好使用std::vector
[教程]:
#include <vector>
std::vector<float> Arithmetic_squence(float start, float end, float b) {
std::vector<float> result;
float last_number = start;
while (last_number <= (end - b)) {
result.push_back(last_number);
last_number += b;
}
return result;
}
在C++中不能有可变长度数组(VLA)
有些编译器支持可变长度数组作为编译器扩展,但如果您使用这些数组,您的代码将不可移植,因为它不符合标准
最好的选择是简单地使用std::vector。
您需要使用std::vector
来实现一个可变大小的数组。
如果这太复杂了,请将result[]
设置为您想要的最大尺寸,并将assert
设置为end - start
不会太大而无法容纳。当我还是一名程序员新手时,我就是这么做的,模板太令人生畏了。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '