2

如何从向量中获取变量?

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

早些时候,我声明了 avector<someStruct> *vObj并分配了它,然后返回了vObj 并在这个函数中调用了它:

vector<sameStruct> firstFunc();

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

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

但我认为我没有做任何事情来取得进展。

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

4

2 回答 2

2

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

当您直接索引到 v 时,您所做的只是指针算术。v[x] 是位置 x 的结构向量(假设 v 是一个数组,如果它只是指针末尾的单个对象,那么 v[x] for x>0 就是垃圾)。这是因为它不是将 [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();

我希望这个对你有用。

于 2009-03-07T02:30:13.270 回答
1

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

尝试;

(*vec)[x];

例如

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

请注意,在指针上调用函数时,您通常使用->运算符而不是. 运算符,但你可以很容易地做到 (*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)
{
}
于 2009-03-07T02:24:26.433 回答