【发布时间】:2016-02-16 20:24:18
【问题描述】:
假设我有一个包含x 和y 的struct Node,我想创建这些Nodes 的向量。
struct Node {
int x;
int y;
Node(int x, int y);
};
vector<Node *> nodes;
我想编写在x 或y 上工作的各种函数。例如,我想编写一个sort 函数,该函数根据x 坐标对节点向量进行排序,另一个根据y 进行排序。
编写一个同时实现 sort_by_x 和 sort_by_y 的函数绝对是一个更好的主意。我正在考虑编写一个函数,它采用bool 之类的isX 并相应地执行排序。但是,我想避免两次编写相同的代码(一次用于 x,一次用于 y)。我想编写一段代码来执行相应的排序。我尝试使用以下代码来实现它,但它在 C++ 中无效(因为它期望 c 是 Node 中的变量之一)。
void mySort(vector<Node *> &nodes, bool isX) {
char c;
if (isX) {
c = 'x';
}
else {
c = 'y';
}
// some code
nodes[i]->c // if c == 'x', x will be used, otherwise y.
}
能否请您给我一个解决方法来重写上述代码或基于不同变量实现相同功能的其他方式?
【问题讨论】:
-
如果您想要
Nodes 的向量,请执行以下操作:std::vector<Node>。指针向量通常不那么有趣。至于排序,已经有一个std::sort函数,您可以将x或y的比较器传递给它。希望您很快就能简单地传递&Node::x或&Node::y而不是包装它。 -
感谢您的评论。排序只是一个简单的例子。我想实现一些 STL 中没有的其他功能。
-
您可以使用
std::sort作为示例并以相同的方式设计您的。更好的是,您可以使用类似于std::invoke的东西来使指向成员选项的指针工作并提供一个采用投影功能的版本。这两件事对所有方面都很有用。 -
非常感谢。我对这些概念不太熟悉,但我会看看。
-
顺便说一句,为什么你认为指针向量不好玩? :)