大小未知的C ++数组

时间:2012-01-15 16:48:40

标签: c++ arrays

我正在尝试实现一个程序,它给你一个确定的开始,结束和基数的序列,问题是我无法确定元素的数量

这是我的简单算术级数生成器的代码

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;
  }
}

它不会编译,因为它需要大小

我也希望代码尽可能简单,所以我希望我不必实现一个非效率,耗时的链表

我也不知道如何处理矢量,也许如果有快速指南我可以使用它

4 个答案:

答案 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不要太大而不适合。这就是我做新手程序员时所做的事情,模板太令人生畏了。