具有未知大小的C++数组

C++ arrays with unknown size

本文关键字:C++ 数组 未知      更新时间:2023-10-16

我正在尝试实现一个程序,该程序为您提供一个具有确定的开始、结束和基础的序列,问题是我无法确定的元素数量

这是我为一个简单的算术级数生成器编写的代码

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

名为resultvector从空开始,每次执行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不会太大而无法容纳。当我还是一名程序员新手时,我就是这么做的,模板太令人生畏了。