C++ 遍历向量的所有成员

C++ 遍历向量的所有成员,c++,vector,compiler-errors,iteration,C++,Vector,Compiler Errors,Iteration,我有两个structs,定义如下: struct vertex { double x; double y; double z; }; struct finalVertex { int n; vertex v; }; 我使用以下代码迭代列表并打印所有成员: vector<finalVertex> finalVertices; vector<finalVertex>::iterator ve; for ( ve = finalVertic

我有两个
struct
s,定义如下:

struct vertex
{
  double x;
  double y;
  double z;
};

struct finalVertex
{
  int n;
  vertex v;
};
我使用以下代码迭代列表并打印所有成员:

  vector<finalVertex> finalVertices;
  vector<finalVertex>::iterator ve;

  for ( ve = finalVertices.begin(); ve < finalVertices.end(); ve++ )
    {
      out << *(ve).v.x << *(ve).v.y << *(ve).v.z << endl;
    }
向量最终属性;
向量::迭代器ve;
for(ve=finalertices.begin();ve
ve->v.x
您还可以做的是:

(*ve).v.x

但它很糟糕。

问题在于运算符优先级:写入
(*ve).v.x
或更简单的,
ve->v.x

除此之外,我建议您重写
运算符
或:


将解引用移动到paren内部,如下所示:

out << (*ve).v.x << (*ve).v.y << (*ve).v.z << endl;
out你不应该写
ve
你必须写作

ve!=finalVertices.end()

好吧,你知道,end()是用优化构建内联的,不应该涉及任何典型容器的计算,所以…@ypnos:可能,是的。但是有很多非典型容器。
for ( ve = finalVertices.begin(); ve != finalVertices.end(); ve++ )
    out << ve->v << endl;
out << *(ve).v.x << *(ve).v.y << *(ve).v.z << endl;
out << (*ve).v.x << (*ve).v.y << (*ve).v.z << endl;
out << ve->v.x << ve->v.y << ve->v.z << endl;
for ( ve = finalVertices.begin(), end = finalVertices.end(); ve != end; ++ve )
out << (*ve).v.x << (*ve).v.y << (*ve).v.z << endl;
        for ( ve = finalVertices.begin(); ve != finalVertices.end(); ++ve )
        {
            ve->v.x;
        }