如何在vector <struct> * obj?</struct>中访问变量

时间:2009-03-07 02:09:26

标签: vector

如何从矢量中获取变量?

我不能使用二进制插入运算符或等号运算符。

之前,我宣布了vector<someStruct> *vObj并分配了它,然后返回了vObj 并在此函数中调用它:

vector<sameStruct> firstFunc();

for (unsigned int x = 0; x < v->size(); x++)
{
   v[x];
}

当我调试它时,v[x]现在具有原始向量的全部内容,就像之前没有下标/索引一样。

但我认为除了那之外我还没有做任何事情。

我的向量中只有4个变量;当我调试它时,它有我需要的信息,但我无法达到它。

2 个答案:

答案 0 :(得分:2)

正如它所写的,v是一个指向结构矢量的指针。

当你直接索引到v时,你所做的只是指针算术。 v [x]是位置x处的结构的向量(假设v是一个数组,如果它只是指针末尾的单个对象,那么对于x> 0的v [x]就是垃圾)。这是因为它将[x]不应用于v指向的向量,而是应用于指针v本身。

您需要取消引用指针,然后使用以下内容索引到向量:

(*v)[x];

此时你有一个对象的第x个位置的引用来获取它的成员函数/变量使用:

(*v)[x].variable;

(*v)[x].memberfunction(parameters);

如果您不想取消引用该向量,则可以访问其中的元素,您可以尝试以下方法:

v->at(x);
v->at(x).variable;
v->at(x).memberfunction;

这样您就可以使用与调用时完全相同的方式访问对象的成员函数:

v->size();

我希望这会有所帮助。

答案 1 :(得分:1)

要使用[]运算符访问元素,必须在对象上执行,而不是指向对象的指针。

尝试;

(*vec)[x];

E.g。

for (int i = 0; i < vec->size(); i++)
{
  printf("Value at %d is %d\n", i, (*vec)[i]);
}

请注意,在指针上调用函数时,通常使用 - &gt; 运算符而不是运算符,但您可以轻松地执行(* vec).some_func ();代替。

[], - ,++等运算符可以对对象和指针起作用。对于对象,它们充当函数调用,但在指针上,它们充当对地址的数学运算。

例如;

pointer[nth];
*(pointer + nth);

具有完全相同的效果 - 它们从指针的开头返回第n个对象。 (注意第二个例子中*的位置,在>应用偏移后称为

另外两个提示;

您还可以通过将向量作为引用而不是指针传递来避免需要取消引用。它并不总是一个合适的选择,但它确实可以使代码更清晰。

void my_func(std::vector<int>& vector)
{
  // vector can then be used as a regular variable
}

如果你要将特定类型的向量传递给很多函数,那么你可以使用typedef来保持清晰度并节省打字。

typedef std::vector<int> IntVector;

void my_func(IntVector& vector)
{
}