簡體   English   中英

C ++-操作STL向量中的對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM