std::make_pair
可用於通過使用std::ref
來創建對引用。 std::ref
在std::reference_wrapper
中存儲引用,該引用通過模板類型推導減少回引用。對於const
參考,請使用std::cref
。
正如其他答案建議,我建議您將Vertex
es存儲在std::vector
中,並將它們初始化爲for循環。同樣,將std::pair
的Vertex
引用存儲在一個向量中,並將它們構造成一個循環。
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]);
注意emplace_back
用於構造就地的Vertex
ES和std::pair
秒。
不過,如果你是綁50線對初始化,並希望使用std::make_pair
提供的類型推演,使用:
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};
這是ideone.com上的一個實例。
創建一個類型爲Vertex的向量並遍歷它們,將每個後續的兩個元素進行配對? – AndyG
它究竟如何工作?假設我有矢量 v;這樣做:for(i = 0; i <= 99; i ++)std :: pair = p(v [i],v [i + 1])?恐怕這是行不通的,因爲它使用了相同的「p」。對不起,我對C++只是一個新手。 –
Void
你有100個變量? –