我有一个命令行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)。有什么想法吗?
答案 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中简要介绍一下格式设置。使用setw
,left
,right
...操纵器比手动操作更好。
答案 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;
}