跟踪/显示阵列索引作为Cout的一部分(C ++)

时间:2010-03-11 04:36:21

标签: c++

我有一个命令行C ++程序,可以让你输入一个人的基本信息(ID号,姓名,年龄等),我想以下列方式输出到控制台:

-------------------------------------------------------------------
Index   ID #        First Name          Last Name           Age
-------------------------------------------------------------------
0       1234        John                Smith               25   

person对象存储在Persons数组中,我重载了ostream(<<<<<<<<<<<<<<<<<<<<&gt虚线和标题来自displayHdg()函数。无论如何,我无法弄清楚如何获得数组的正确索引值。理想情况下,我想为每一行生成索引,但我的所有尝试都失败了。数组循环通过,每个对象都打印在main()函数中,ostream在person类中重载,所以我尝试使用全局变量和静态变量,所有这些都产生错误的编号(即显示0) ,1第一次(对于2个对象),然后在下一个显示中更改为1,2)。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

这不会有用吗? (省略了ID字段的格式化)

vector<Person> v;

for (int i = 0; i < v.size(); ++i)
  cout << i + 1 << v[i] << endl;

开始索引为1。

答案 1 :(得分:0)

编辑:

好的,现在我明白了你的意思。你想在向量中找到一个元素!

std::vector<person>::iterator p = 
          std::find(Persons.begin(), Persons.end(), element);

if( p != Persons.end() )
{
  std::cout << "index of element is: " << p-Persons.begin();
}

如果您有正确的格式化,您应该能够执行以下操作:

for(size_t i = 0; i < Persons.size(); ++i)
{
  cout << i << '\t' << Persons[i] << endl;
}

我建议您在this post中简要介绍一下格式设置。使用setwleftright ...操纵器比手动操作更好。

答案 2 :(得分:0)

您需要使用“查找”算法在向量中找到Person对象的精确索引&lt;人&GT;

答案 3 :(得分:0)

您可以使用包装类来保存索引并根据operator<<中的格式打印它:

// wrapper to hold index
template<typename T>
struct Ti
{
    Ti( size_t index, const T& t ) : index(index), val(t) {}
    size_t index;
    const T& val;
};

// you class
struct X
{
    friend ostream& operator<<( ostream& out, Ti<X>& t );
protected:
    int some_data;
};

// operator<< for X
ostream& operator<<( ostream& out, Ti<X>& t )
{
    out << "test " << t.index << "  " << t.val.some_data;
    return out;     
}

int main()
{
    vector<X> xxx;
    for ( size_t i =0; i < xxx.size(); ++i)
        cout << Ti<X>(i+1, xxx[i]) << endl;
}