【发布时间】:2022-01-14 07:35:39
【问题描述】:
我有以下代码体。
#include <iostream>
#include <vector>
#include <tuple>
int main() {
std::vector<std::tuple<int, int>> edges(4,{1,2});
for (auto i = std::begin (edges); i != std::end (edges); ++i) {
std::cout << std::get<0>(i) << " "<< std::get<1>(i)<< " ";
}
}
在我看来这是有道理的,我有一个正在初始化的元组向量。然后我遍历向量,分别打印元组的两个元素中的每一个。
但是代码doesn't work返回
8:26: error: no matching function for call to 'get'
std::cout << std::get<0>(i) << " "<< std::get<1>(i)<< " ";
^~~~~~~~~~~
谁能解释一下原因?
【问题讨论】:
-
i是元组上的迭代器;*i是一个元组。 -
你的元组代表什么,我经常发现用清晰的名称创建我自己的结构会使代码更具可读性。我还将用基于范围的 for 循环替换 for 循环并迭代向量的 const & 。比如:for(const auto& edge : edges) std::cout
-
offtopic:元组设计用于模板。在常规代码中,最好将结构与正确命名的字段一起使用。