[英]C++ - manipulating objects in a STL vector?
我有這樣的結構:
struct Rz3DContourNode {
float x;
float y;
float z;
float nx;
float ny;
float nz;
};
我將元素存儲在STL向量中,如下所示:
std::vector < Rz3DContourNode > nodes;
現在我想更改向量中節點的nx,ny分量。我嘗試如下:
*(&nodes[i].nx)=newNXValue;
*(&nodes[i].ny)=newNYValue;
*(&nodes[i].nz)=newNZValue;
這是行不通的。是因為nodes [i]返回了對象的副本?
有沒有使用指針解決這個問題的方法?
我不能使用指針(Rz3DContourNode *),因為我在OpenGL中使用此向量為
glNormalPointer(GL_FLOAT,sizeof(Rz3DContourNode), &nodes[0].nx);
編輯-對不起,我實際上保留了一個QList並每次都獲取std :: vector。這就是原因
std::vector<Rz3DContourNode> nodeVector = nodes.toVector().toStdVector();
為什么還要煩惱指針? []
運算符返回對存儲對象的引用,因此您可以執行
nodes[i].nx = newNXValue;
nodes[i].ny = newNYValue;
nodes[i].nz = newNZValue;
它可以在我的編譯器上工作。...獲取實例的地址,然后再取消引用它,就與不做所有事情一樣。 因此,您不需要它。 所以取代這個
*(&nodes[i].nx)=newNXValue;
與
nodes[i].nx = newNXValue;
這是我嘗試過的代碼示例:
#include "stdafx.h"
#include <stdio.h>
#include <vector>
struct Rz3DContourNode {
float x;
float y;
float z;
float nx;
float ny;
float nz;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector < Rz3DContourNode > nodes;
float newNXValue = 4545.4f;
float newNYValue = 453.0f;
float newNZValue = 34.0f;
for (int i = 0; i < 3; i++)
{
Rz3DContourNode node = {1.0f,1.0f,1.0f,1.0f,1.0f,1.0f};
nodes.push_back(node);
}
for (int i = 0; i < nodes.size(); i++)
{
nodes[i].nx = newNXValue;
nodes[i].ny = newNYValue;
nodes[i].nz = newNZValue;
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.