我正在尝试实现一个程序,它给你一个确定的开始,结束和基数的序列,问题是我无法确定元素的数量
这是我的简单算术级数生成器的代码
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;
}
}
它不会编译,因为它需要大小
我也希望代码尽可能简单,所以我希望我不必实现一个非效率,耗时的链表
我也不知道如何处理矢量,也许如果有快速指南我可以使用它
答案 0 :(得分:6)
是的,使用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;
}
名为vector
的{{1}}空出来并在每次result
时添加元素。
您可以使用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;有关C ++标准库的一般参考,请参阅http://en.cppreference.com/w/cpp/。
答案 1 :(得分:3)
在这种情况下,使用std::vector
[tutorial] 最好:
#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;
}
答案 2 :(得分:1)
你不能在C ++中拥有可变长度数组(VLA)
一些编译器支持可变长度数组作为编译器扩展但是如果你使用它们,你的代码将是不可移植的,因为它是非标准符合的。
最好的选择是使用 std::vector 。
答案 3 :(得分:1)
您需要使用std::vector
来实现可变大小的数组。
如果这太复杂,请将result[]
设置为您可能想要的最大尺寸,assert
end - start
不要太大而不适合。这就是我做新手程序员时所做的事情,模板太令人生畏了。