在我的程序中,我有一个包含D3DXVECTOR3变量的向量。可以推断,载体含有多个D3DXVECTOR3载体。但是为了效率,我只有一个D3DXVECTOR3变量,其值x,y和z I在多次推回矢量容器之前发生变化,我只是想知道它是否可能有一个D3DXVECTOR3变量你在推回到矢量容器之前多次更新或者你是否必须为你希望父矢量包含多少个矢量声明一个新的D3DXVECTOR3变量?
目前代码如下:
vector<D3DXVECTOR3> gradients;
D3DXVECTOR3 singleGrad;
singleGrad.x = 1.0;
singleGrad.y = 1.0;
singleGrad.z = 0.0;
gradients.push_back(singleGrad);
singleGrad.x = -1.0;
gradients.push_back(singleGrad);
singleGrad.x = 1.0;
singleGrad.y = -1.0;
gradients.push_back(singleGrad);
singleGrad.x = -1.0;
singleGrad.y = -1.0;
singleGrad.z = 0.0;
gradients.push_back(singleGrad);
答案 0 :(得分:1)
如果您认为自己甚至没有在向量中保留记忆,然后使用之前值的副本进行潜在的大小调整,那么您的效率概念是完全错误的。
你应该考虑编写易于阅读的代码并优化它真正重要的地方:
std::vector<D3DXVECTOR3> gradients;
gradients.reserve(4);
gradients.push_back({ 1.f, 1.f, 0.f});
gradients.push_back({-1.f, 1.f, 0.f});
gradients.push_back({ 1.f,-1.f, 0.f});
gradients.push_back({-1.f,-1.f, 0.f});
如果您关心代码大小,请使用循环进行分解。
std::vector<D3DXVECTOR3> gradients;
gradients.reserve(4);
float const signs[] { 1.f, -1.f };
for( int v{};v!=2;++v )
for( int u{};u!=2;++u )
gradients.push_back({signs[u],signs[v], 0.f});