【发布时间】:2017-01-04 15:20:06
【问题描述】:
我有一个结构:
struct xyz{
int x,y,z;
};
我初始化了一个struct xyz 类型向量:
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
for (int k = 0; k < N; k++)
{
v.x=i;
v.y=j;
v.z=k;
vect.push_back(v);
}
}
}
然后我想将该向量转换为数组,因为数组的操作速度比向量快 2 倍,所以我这样做了
xyz arr[vect.size()];
std::copy(vect.begin(), vect.end(), arr);
当我运行这个程序时,它显示了分段错误,我认为这是因为vect.size() 太大。
所以我想知道有没有办法将那个大尺寸的向量转换为数组而没有这个问题。
感谢您的帮助
【问题讨论】:
-
您需要使用堆 (
new),因为直到运行时才知道向量的大小。 -
你从哪里得到因为数组的操作比向量快2倍?正确使用的向量在速度方面应该与数组几乎相同。
-
1) VLA (
xyz arr[vect.size()];) 是非标准 C++ 2) 你觉得呢?您是否尝试过 anything 自行解决问题(例如调试器)? 3) 我想将该向量转换为数组,因为数组的操作速度比向量快 2 倍你从哪里读到这个废话? -
您要么知道编译时
xyz实例的数量,要么您不知道。如果您这样做,请使用std::array,如果您不这样做,请使用std::vector。混合这些容器没有任何好处。