![](/img/trans.png)
[英]Why can I have a std::vector<std::ofstream*> but not a std::vector<std::ofstream>?
[英]Why can I create a vector of std::array?
我认为您应该始终在编译时确定数组的大小。 我认为是这种情况,因为将为该数组分配特定数量的 memory。
那么,为什么这不是问题:
std::vector<std::array<int,3>> something;
something.push_back(std::array<int,3> {1,2,3});
在这种情况下,您已经确定了数组的大小,但您不知道会是多少。 在运行时,您将创建未知数量的 arrays,那么为什么可以在事先不知道 memory 分配的情况下创建 arrays?
想想看,它不起作用,那么std::vector<int>
出于同样的原因也不起作用。 您不需要事先知道std::vector
中的元素数量,因为该向量动态管理存储元素所需的 memory。
std::array<int,3>
的大小始终相同,这就是向量需要知道的为它们分配 memory 的内容。
此外, sizeof( std::vector<T> )
是一个常数。 当你推送更多元素时它不会改变,就像 this 的sizeof
struct foo {
int * p;
};
总是相同的,无论p
指向一个包含1
个元素还是42
元素的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.