非常基本的问题,但我无法理解如何输出它。
我有一个
vector< vector<float> > distance_table;
里面充满了各种各样的数字。现在我要输出这些。
这是我的代码:
vector< vector<float> > :: iterator row;
vector<float> ::iterator col;
for (row = distance_table.begin(); row !=distance_table.end(); row++)
{
for (col = row->begin(); col !=row->end(); col++)
{
cout << distance_table[row][col] <<endl;
}
}
distance_table [row] [col]不起作用。这显然不是正确的语法。什么是正确的语法?
答案 0 :(得分:4)
您无法使用迭代器进行索引。您可以使用整数,也可以使用迭代器,但不能同时使用两者。您可以取消引用第二个迭代器以获取特定向量中的值。
vector< vector<float> > :: iterator row;
vector<float> ::iterator col;
for (row = distance_table.begin(); row !=distance_table.end(); row++)
{
for (col = row->begin(); col !=row->end(); col++)
{
cout << *col << endl;
}
}
答案 1 :(得分:2)
col
是内部向量的迭代器,因此您只需要取消引用它以获取值:
cout << *col << endl;
答案 2 :(得分:1)
最简单的方法是使用基于范围的语句。例如
for ( const std::vector<double> &v : distance_table )
{
for ( double x : v ) std::cout << x << ' ';
std::cout << std::endl;
}
至于代码,那么如果你想使用下标运算符,你应该使用对向量元素的索引访问来代替迭代器。
例如
typedef std::vector<std::vector<double>>::size_type size_type;
for ( size_type i = 0; i < distance_table.size(); i++ )
{
for ( size_type j = 0; j < distance_table[i].size(); j++ )
{
std::cout << distance_table[i][j] << ' ';
}
std::cout << std::endl;
}
答案 3 :(得分:0)
一种做你想做的事的方法。请注意,虽然使用迭代器同样好,但这种方法不使用迭代器。
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
vector< vector<float> > distance_table;
vector<float> a {0, 1};
distance_table.push_back(a);
for (auto i = 0; i <distance_table.size(); i++)
{
for (auto j = 0; j <distance_table[i].size(); j++)
{
cout << distance_table[i][j] << endl;
}
}
}