#include <iostream>
#include <fstream>
#include <list>
#include <tuple>
using namespace std;
int main()
{
list<tuple<char,double,double>> XYZ_Widget_Store;
ifstream infile;
infile.open("data.text");
char x; // S, P, R
double a,b;
for(;infile >> x >> a >> b;){
XYZ_Widget_Store.push_back(make_tuple(x,a,b));
}
infile.close();
for(list<int>::iterator it = XYZ_Widget_Store.begin(); it !=
XYZ_Widget_Store.end(); ++it){
cout << *it.get<0> << endl;
}
return 0;
}
假设我list
上的第一项包含tuple ('a',1,1)
如何从该元组中获取第一个元素'a'?通常它只是get<0>(mytuple)
但是在列表中会让人难以理解。我想迭代列表并从列表中的每个元素获取每个第一个元素。 list
的元素本身就是tuple
。
答案 0 :(得分:2)
如果您要使用C ++ 11,您可以使用其他不错的功能,如auto
和for-each循环。以下是您可能重写最后for
循环的方法:
for (auto& tup : XYZ_Widget_Store) {
cout << get<0>(tup) << endl;
}
答案 1 :(得分:0)
您需要使用get<0>(*it)
来获取第一个元素,因为it
是指向元组的指针。所以,你在for
循环中的陈述应该是:
cout << get<0>(*it) << endl;
答案 2 :(得分:0)
如果it
是list<T>::iterator
,则*it
将为您提供类型T
的相应对象。因此,您需要使用get<0>(*it)
来访问适当的元组元素。您的for
循环中有另一个错误:而不是
list<int>::iterator it = XYZ_Widget_Store.begin()
你需要
list<tuple<char,double,double>>::iterator it = XYZ_Widget_Store.begin().
如果您使用的是C ++ 11,您也可以
auto it = XYZ_Widget_Store.begin()