返回std::pair是否优于返回大小为2的std::vector

Is returning std::pair superior to returning std::vector of size 2?

本文关键字:std 返回 小为 vector pair 是否 于返回      更新时间:2024-05-24

标题反映了我的问题,对于相同的变量类型,返回std::pair是否优于返回大小为2的std::vector?

例如;

return std::make_pair(1, 92);std::vector<int> myV{1,92}; return myV;

如果您可以在这两者之间进行选择,即您知道您将返回两个元素,那么-可能是的。为什么?

  1. 更精确的语义。返回一个向量意味着可能存在许多输出值
  2. std::vector是一个"较重"的类——典型的实现在堆上分配内存用于存储元素数据,即使只有两个小元素
  3. (次要考虑(构造std::vector有点棘手且容易出错,请参阅@JesperJuhl的评论

正如@Yksisarvien所建议的,std::array<int, 2>也是一个需要考虑的选项,它至少比std::vector<int>更好。但通常最好的做法是定义自己的结构,字段具有有意义的名称,例如:

struct query_results {
int num_students;
int max_grade;
}

如果你知道可能值的范围更有限,那么可能会使用更具体的字段类型。

这在很大程度上取决于您想要传达的信息。这两种价值观本身有意义吗?他们彼此有亲戚关系吗?它是一个恰好有两个值的容器吗?

在这是两个具有特定含义的值的情况下,更高级(更容易阅读(的方法是返回一个带有两个命名成员的小struct,或者如果由于某种原因无法实现结构,则返回std::pair
示例可以是键和值对(如std::map(或操作结果和状态。

如果这只是两个要迭代或通过索引访问的值,则std::array<int, 2>std::vector更好
示例可以是2D空间中的一个数学向量(您可能希望将其添加到另一个向量中(。