返回std::pair是否优于返回大小为2的std::vector
Is returning std::pair superior to returning std::vector of size 2?
标题反映了我的问题,对于相同的变量类型,返回std::pair是否优于返回大小为2的std::vector?
例如;
return std::make_pair(1, 92);
与std::vector<int> myV{1,92}; return myV;
如果您可以在这两者之间进行选择,即您知道您将返回两个元素,那么-可能是的。为什么?
- 更精确的语义。返回一个向量意味着可能存在许多输出值
std::vector
是一个"较重"的类——典型的实现在堆上分配内存用于存储元素数据,即使只有两个小元素- (次要考虑(构造
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空间中的一个数学向量(您可能希望将其添加到另一个向量中(。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 如何获取std::result_of函数的返回类型
- 架构决策:返回std::future还是提供回调
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 使用std::mt19937从字符串中返回一个随机单词
- 如何使用std::min和std::less返回对象
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 返回一个带有 std::move 的对象并链接函数
- 推导 std::vector::back() 的返回类型
- 为什么 C++ std::unordered_map 从 emplace/ 找到返回一个迭代器?
- 如何从 std::thread 返回值
- 从 std<Derived>::shared_ptr 的向量返回 std::shared_ptr<Base>
- 在带有尾部斜杠的路径上返回 std::filesystem::create_directories() 的值
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何从 std::vector 搜索和返回项目
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?