如何从矢量中获取变量?
我不能使用二进制插入运算符或等号运算符。
之前,我宣布了vector<someStruct> *vObj
并分配了它,然后返回了vObj
并在此函数中调用它:
vector<sameStruct> firstFunc();
for (unsigned int x = 0; x < v->size(); x++)
{
v[x];
}
当我调试它时,v[x]
现在具有原始向量的全部内容,就像之前没有下标/索引一样。
但我认为除了那之外我还没有做任何事情。
我的向量中只有4个变量;当我调试它时,它有我需要的信息,但我无法达到它。
答案 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)
{
}