之间有什么区别
float* x = new float[SIZE];
和
vector<float> x(SIZE);
虽然它们都在内存中占用SIZE整数空间,并且使用vector允许使用有用的辅助函数,如果我不需要使用向量函数,该怎么办呢。
从表现和记忆中明智地使用float*
或shared_ptr<float>
代替vector<float>
会更好吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
vector<float> x(SIZE);
这是一个浮点列表,其中可以在创建后追加或删除元素。它还可以自动化内存管理
float* x = new float[SIZE];
这是固定大小数组的C级手动分配。 C ++等价物是
std::array<float, SIZE> x;
如果您不需要动态数组,std::array
通常符合您的需求。 (但请注意,std::array
是C ++ 11的东西,旧编译器不支持。)
答案 2 :(得分:0)
vector
提供了增长和缩小的可能性,而不是数组的情况。此外,可以使用成员函数读取vector
的大小,这对于数组是不可能的。
答案 3 :(得分:0)
Vector是一个包装数组的类。 这有利有弊:
一般来说,如果你没有进行高性能计算,我会总是使用vector而不是数组。
答案 4 :(得分:0)
float* x = new float[SIZE];
这将分配一个SIZE数量的浮点元素数组,例如,如果SIZE为10,它将分配10个浮点数的数组,并且可以作为x [0],x [1],... x [ 9]。没有边界检查,即如果您访问超过9,则不会发生错误/异常。
vector<float> x(SIZE);
分配一个SIZE数量的float元素的向量,它也可以增大。例如,如果SIZE为10,它将分配10个浮点数的向量,并且可以作为x [0],x [1],... x [9]来访问。此外,可以使用其他矢量辅助函数。类似的成员函数vector :: at与此操作符函数具有相同的行为,除了对vector :: at进行绑定检查,并通过抛出out_of_range异常来通知请求的位置是否超出范围。 参考:http://www.cplusplus.com/reference/vector/vector/operator[]/
答案 5 :(得分:0)
如果我不需要使用向量函数该怎么办。
然后不要使用它们。向量提供了操作值序列的操作,因此如果需要原始指针,可能使用向量。
使用float *而不是vector会更好吗??
这取决于你要解决的问题;通常,您会发现管理一系列值时遇到的问题往往与范围相似,并且使用矢量来处理它们,这比每次重新发明轮子要好得多(而且可能做得不好)。
在实践中,我发现了一个禁止使用矢量的单个项目,这是一个性能关键的服务器系统(已经开发,分析和优化了十多年)。除非您正在编写性能关键型软件,否则您可能希望使用向量。就此而言,如果您正在编写这种软件,您可能也想使用矢量。
使用float *而不是vector会更好吗??
基本上,如果你需要问,请使用矢量:)
使用float *会不会更好。向量解决了大量的重新解决问题,你通常不会考虑(并且不想,也不应该)。
其中包括异常安全实现,缓冲区溢出,内存泄漏等。
答案 6 :(得分:0)
嗯,float*
是一个buitin,而std::vector<float>
是一个用于保存多个对象的类。 float*
是指向float类型的对象的指针。这就是为什么你可以用new
指定一个浮点数组的指针,以便指针指向新数组的第一个元素。另一个区别是你需要delete[]
一个用new[]
分配的数组,而vector<float>
被动态分配/调整大小并由它的析构函数释放。