【发布时间】:2011-01-15 05:22:16
【问题描述】:
使用具有两个字段和一对字段的结构在内存分配和效率方面有什么区别?
【问题讨论】:
使用具有两个字段和一对字段的结构在内存分配和效率方面有什么区别?
【问题讨论】:
std::pair 提供预先编写的构造函数和比较运算符。这也允许它们存储在像 std::map 这样的容器中,而无需编写,例如,复制构造函数或通过operator < 进行的严格弱排序(如std::map 所要求的)。如果你不写它们就不会出错(还记得弱排序是如何工作的吗?)所以使用std::pair 更可靠。
【讨论】:
pair 提供了一个默认的 ctor,以及一个模板复制 ctor。有道理 - 这样,在每种情况下,pair 允许在 & 仅当底层类型允许时调用它。
就内存分配和效率而言,没有区别——因为std::pair就是这样。
【讨论】:
在内存分配或效率方面没有区别。其实在我使用的STL实现中pair被定义为struct pair
【讨论】:
pair 与 first 和 second 一样),那么它必须是 @987654325 @.
class,在 public 部分中声明了 first 和 second。根据界面,first和second成员必须是public;没有说明它必须是class 还是struct。
struct X { ... }; 和 class X { public: ... }; 之间没有任何语义差异。 (例如,与 C# 不同。)
std::pair 带有许多构造函数和运算符。
struct 允许命名字段(first 和 second 除外)并且随时可以扩展。
尽可能选择struct。它可能会涉及一些开销,但肯定更容易维护。
【讨论】:
正如std::pair<int, int> vs struct with two int's 中所述,结构可能会快一点,因为没有进行初始化。
【讨论】:
正如上面没有提到的,如果你想要你自己名字的好处,但 std::pair (或任何其他对象)的优点,你可以使用“使用”(从 c++11 开始) .您可以在命名空间或类声明中设置它。
事实上,这就是我现在有多少课程开始...
using myPair = pair<int,string>;
【讨论】:
.first 和.second“问题”。