将矢量传递给函数(指针/地址)
Passing vector to function (pointers/addresses)
在以下情况下,sortMyVectors
的参数列表必须是什么样子,以及如何从myFunction
内部调用它?
std::vector<Vector2> myFunction ( MyObj * myObj ) {
std::vector<Vector2> myVectors;
// fill with lots of Vector2(double x, double y) objects
sortMyVectors( ???-myVectors, ???-myObj);
return myVectors;
}
void sortMyVectors( vector<Vector2> &myVectors, const MyObj &myObj) {
// sort the std::vector using myObj
// modifies order of Vector2s within the passed-in myVectors
// does not modify myObj
// need to be able to access with myVectors[0].x here...
}
其调用方式为myFunction(&(*myObj));
,其中myObj
是list<MyObj>::iterator
。有没有更干净的写法?
sortMyVectors( ???-myVectors, ???-myObj);
答案:
sortMyVectors(myVectors, *myObj);
由于目前您在指针方面似乎遇到了一些基本问题(我怀疑这是一些家庭作业的练习),建议您学习迭代器可能有点过于先进,但您应该稍后与std::sort
一起研究这一点,这在任何手动排序中都很难击败。
为了提高你对指针的理解:
MyObj* myObjPtr = ...;
这是一个指针。它指向一个内存地址。假设它指向一个有效的,我们可以这样做:
MyObj& myObjRef = *myObjPtr;
现在,我们取消引用指针以获得指针对象,并将其分配给一个引用,该引用也类似于指针,但隐藏了指针/指针对象的区别(不需要运算符*来访问指针对象/被引用对象)。
针对您的评论:
"排序"基本上是根据这些向量与另一个矢量,但只在特定情况下,所以我不知道有一种标准的方法可以做到这一点。。
std::sort接受一个严格的弱排序谓词(基本上是一个函数或函数对象,它根据element1<element2是否返回true/false)。示例:
bool length_is_less(const string& str1, const string& str2)
{
return str1.size() < str2.size();
}
vector<string> my_strings = ...;
sort(my_strings.begin(), my_strings.end(), length_is_less);
上面的代码根据字符串的长度从最短字符串到最长字符串进行排序,而不是按照字符串顺序(粗略地说是字母顺序)进行排序的默认行为(字符串的默认运算符<实现)。
考虑到可以定义自己的谓词来比较对象,基本上可以使用std::sort
根据任何条件对任何内容进行排序。
不要重新发明排序,使用std::sort
,它允许您传入谓词对象,如MyObj
,只要它有一个operator()
来进行排序。它使用迭代器而不是容器,这提供了更大的灵活性。
如果您只想让myFunction调用传入myObj和myVectors的sortMyVectors,请执行以下操作:
std::vector<Vector2> myFunction ( MyObj * myObj ) {
std::vector<Vector2> myVectors;
// fill with lots of Vector2(double x, double y) objects
sortMyVectors(myVectors, myObj);
return myVectors;
}
void sortMyVectors(vector<Vector2> &myVectors, const MyObj *myObj) {
// Check for null pointer of myObj
// sort the std::vector using myObj
// need to be able to access with myVectors[0].x here...
}
- CUDA:统一内存和指针地址的更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 向指针地址添加 20 个字节偏移量
- 如何理解智能指针的底层指针地址?
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 返回数组中值的指针地址
- C++向指针地址添加 4 个字节
- 指针地址的内存偶尔更改了函数前和后返回
- 如何根据指针地址获取指针内容
- C++ 将指针地址传递给函数
- 直接从指针/地址访问数组的元素
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何保存指针地址,以便另一个指针可以继续处理它
- 间接寻址运算符如何返回带有运算符重载的指针地址
- 使用已删除的指针地址.据我所知,
- 如何保护类外用户可以修改的指针地址?C++
- 多个调用构造函数将更改C 中的成员指针地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- Visual Studio C 2K15-在指针地址上获取错误
- 指针地址和参考混乱