C++11 C++中实例化的对对象
我有一个包含许多对象的顶点类,例如C++11 C++中实例化的对对象,c++11,C++11,我有一个包含许多对象的顶点类,例如 class Vertex{ int i; public: Vertex(const int & a):i(a){} }; Vertex v1(1),v2(2)...v100(100); 现在我想做50对,每对连接两个顶点。实现这一目标的最佳方式是什么?我绝对不想做以下事情: std::pair<const Vertex &, const Vertex &> p1(v1,v2); ... std::pair
class Vertex{
int i;
public:
Vertex(const int & a):i(a){}
};
Vertex v1(1),v2(2)...v100(100);
现在我想做50对,每对连接两个顶点。实现这一目标的最佳方式是什么?我绝对不想做以下事情:
std::pair<const Vertex &, const Vertex &> p1(v1,v2);
...
std::pair<const Vertex &, const Vertex &> p50(v99,v100);
std::make_pair似乎是一个更好的选择。但如果我理解正确,它只接受值,不接受引用。非常感谢 为什么不使用std::vector来存储顶点对
如果确实要为所有顶点保留100个变量,则可以使用以下命令在std::pair中存储对顶点的常量引用:
为什么不使用std::vector来存储顶点对呢
如果确实要为所有顶点保留100个变量,则可以使用以下命令在std::pair中存储对顶点的常量引用:
std::make_pair可用于通过使用std::ref创建引用对。std::ref将引用存储在std::reference_包装中,通过模板类型推断,该包装将引用还原为引用。对于常量引用,请使用std::cref
正如其他答案所建议的,我建议将顶点存储在std::vector中,并在for循环中初始化它们。类似地,将std::对顶点引用存储在向量中,并在循环中构造它们
constexpr auto num_vertices = 100;
std::vector<Vertex> v;
v.reserve(num_vertices);
for (auto i = 0; i < num_vertices; ++i)
v.emplace_back(i);
std::vector<std::pair<const Vertex&, const Vertex&>> p;
p.reserve(num_vertices/2);
for (auto i = 0; i < num_vertices; i += 2)
p.emplace_back(v[i], v[i+1]);
但在这种情况下,只使用统一初始化更简单:
std::pair<const Vertex&, const Vertex&> p1 = {v1, v2},
p2 = {v2, v3},
// ...
p50 = {v99, v100};
下面是一个关于的实时示例。std::make\u pair可用于通过使用std::ref创建引用对。std::ref将引用存储在std::reference\u包装中,通过模板类型推断,该包装可还原为引用。对于常量引用,请使用std::cref
正如其他答案所建议的,我建议将顶点存储在std::vector中,并在for循环中初始化它们。类似地,将std::对顶点引用存储在向量中,并在循环中构造它们
constexpr auto num_vertices = 100;
std::vector<Vertex> v;
v.reserve(num_vertices);
for (auto i = 0; i < num_vertices; ++i)
v.emplace_back(i);
std::vector<std::pair<const Vertex&, const Vertex&>> p;
p.reserve(num_vertices/2);
for (auto i = 0; i < num_vertices; i += 2)
p.emplace_back(v[i], v[i+1]);
但在这种情况下,只使用统一初始化更简单:
std::pair<const Vertex&, const Vertex&> p1 = {v1, v2},
p2 = {v2, v3},
// ...
p50 = {v99, v100};
下面是一个关于的实例。创建一个Vertex类型的向量并在其上迭代,每两个向量配对一次?它到底是如何工作的?假设我有向量v;我是否这样做:fori=0;你有100个变量???假设我有。有没有办法避免一些繁重的工作?关于引用对的一些技巧:创建一个顶点类型的向量并在它们上面迭代,每两个顶点配对一次?它到底是如何工作的?假设我有向量v;我是否这样做:fori=0;你有100个变量???假设我有。有什么方法可以避免一些繁重的工作吗?关于引用对的一些提示:std::reference\u wrapper比常规指针有什么优势吗?std::reference\u wrapper比常规指针有什么优势吗?
auto p1 = std::make_pair(std::cref(v1), std::cref(v2)),
p2 = std::make_pair(std::cref(v3), std::cref(v4)),
// ...
p50 = std::make_pair(std::cref(v99), std::cref(v100));
std::pair<const Vertex&, const Vertex&> p1 = {v1, v2},
p2 = {v2, v3},
// ...
p50 = {v99, v100};