【问题标题】:Track/Display Array Index As Part Of Cout (C++)跟踪/显示数组索引作为 Cout 的一部分 (C++)
【发布时间】:2010-03-11 04:36:21
【问题描述】:

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

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

person 对象存储在 Persons 数组中,我重载了 ostream (

【问题讨论】:

  • 我真的不清楚你要做什么。如何将索引传递给 cout(operator
  • 向我们展示重载的

标签: c++


【解决方案1】:

这不行吗? (省略ID字段的格式)

vector<Person> v;

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

这将从 1 开始索引。

【讨论】:

  • 由于某种原因,最明显的答案让我无法理解,直到我重新阅读了您的代码,Eli。这太简单了......我所要做的就是进入 for 循环,在那里我打印出每一行并让它打印出 i。出于某种原因,当我试图将索引与每个 Person 对象相关联时,我什至没有想到这一点。非常感谢,我会尽量不要再犯这个错误。
【解决方案2】:

编辑:

好的,现在我知道你想要什么了。你想在向量中找到一个元素!

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...机械手比手动操作要好。

【讨论】:

  • 对,我现在就是这样。我使用过 setw、left、right、setfill 等。我的问题是尝试打印数组元素的索引值。通常在 Java 或 C# 中,我会执行 Array.indexOf(element) ,这会给我元素的索引。 C++ 中是否有等价物?
  • 我需要的更简单(见我自己的答案),但非常感谢你在向量函数中的查找。我也想知道如何做到这一点。我也可以将 find 函数与数组一起使用吗?
  • @John:是的,这就是 STL 容器/算法分离的力量。您只需要传递表示内容开头和结尾的迭代器,并且指针可用作迭代器。所以 find(array, array+length, predicate) 或者这些参数的顺序不同。
【解决方案3】:

您需要使用“查找”算法在向量 中找到 Person 对象的准确索引。

【讨论】:

【解决方案4】:

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

// 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;
}

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 1970-01-01
    • 2010-12-07
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多