我需要打印Tuple“taborder”中包含的向量。 代码
std::vector<std::tuple< std::vector<int>, std::vector<int>, std::vector<int> > > taborder;
for (int i = 1; i < 4; i++){
std::vector<int> id (i,5);
std::vector<int> x (i,10);
std::vector<int> y (i,15);
taborder.push_back(std::make_tuple(id, x, y));
}
for(vector<tuple>::iterator iter = taborder.begin(); iter != taborder.end(); iter++){
cout << get<0>(*iter) << "\t" << get<1>(*iter) << "\t" << get<2>(*iter) << endl;
}
产生错误:
type/value mismatch at argument 1 in template parameter list for 'template<class _Tp, class _Alloc> class std::vector'
|
答案 0 :(得分:0)
你搞砸了外部矢量迭代和内部矢量。
您可以使用新标准中的自动功能来减少命名膨胀,并使用编译器推导出精确类型,并为每个循环简化代码。
Here您可以找到代码的工作示例
#include <iostream>
#include <tuple>
#include <vector>
using namespace std;
int main() {
std::vector<std::tuple< std::vector<int>, std::vector<int>, std::vector<int> > > taborder;
for (int i = 1; i < 4; i++){
std::vector<int> id (i,5);
std::vector<int> x (i,10);
std::vector<int> y (i,15);
taborder.push_back(std::make_tuple(id, x, y));
}
for(auto & outer_vec_elem : taborder){
auto & inner_vec0 = get<0>(outer_vec_elem);
auto & inner_vec1 = get<1>(outer_vec_elem);
auto & inner_vec2 = get<2>(outer_vec_elem);
for(auto inner_vec_elem : inner_vec0){
cout << inner_vec_elem << "\t";
}
for(auto inner_vec_elem : inner_vec1){
cout << inner_vec_elem << "\t";
}
for(auto inner_vec_elem : inner_vec2){
cout << inner_vec_elem << "\t";
}
}
return 0;
}
答案 1 :(得分:0)
您似乎没有完成指定迭代器的类型:
使用auto
或预编译C ++ 11编译器
vector<tuple< std::vector<int>, std::vector<int>, std::vector<int> > >::iterator
同样在你的主循环中你必须迭代每个元组内的内部向量。
以下是您可以使用的变体或多或少,具体取决于您希望输出的方式:
<强> 1。变体:元组明智的输出(假设所有向量具有相同的大小)
int main() {
std::vector<std::tuple< std::vector<int>, std::vector<int>, std::vector<int> > > taborder;
for (int i = 1; i < 4; i++){
std::vector<int> id (i,5);
std::vector<int> x (i,10);
std::vector<int> y (i,15);
taborder.push_back(std::make_tuple(id, x, y));
}
for(vector<tuple< std::vector<int>, std::vector<int>, std::vector<int> > >::iterator iter = taborder.begin(); iter != taborder.end(); iter++){
// or
// for(auto iter = taborder.begin(); iter != taborder.end(); iter++){
auto mytuple = *iter;
// You have to iterate over all the inner vectors
for (unsigned int i = 0; i < get<0>(mytuple).size(); ++i ) {
cout << get<0>(mytuple)[i] << "\t" << get<1>(mytuple)[i] << "\t" << get<2>(mytuple)[i] << endl;
}
}
}
<强> 2。变体:每个元组向量(正如其他已经显示的那样)
int main() {
std::vector<std::tuple< std::vector<int>, std::vector<int>, std::vector<int> > > taborder;
for (int i = 1; i < 4; i++){
std::vector<int> id (i,5);
std::vector<int> x (i,10);
std::vector<int> y (i,15);
taborder.push_back(std::make_tuple(id, x, y));
}
for(vector<tuple< std::vector<int>, std::vector<int>, std::vector<int> > >::iterator iter = taborder.begin(); iter != taborder.end(); iter++){
// or
// for(auto iter = taborder.begin(); iter != taborder.end(); iter++){
auto mytuple = *iter;
for (unsigned int i = 0; i < get<0>(mytuple).size(); ++i ) {
cout << get<0>(mytuple)[i] << "\t";
}
cout << endl;
for (unsigned int i = 0; i < get<1>(mytuple).size(); ++i ) {
cout << get<1>(mytuple)[i] << "\t";
}
cout << endl;
for (unsigned int i = 0; i < get<2>(mytuple).size(); ++i ) {
cout << get<2>(mytuple)[i] << "\t";
}
cout << endl;
}
}