C++ STL Vector Iterator访问Object的成员

ric*_*hyz 11 c++

我想我已经正确地声明了一个带有对象的Vector.但是,在使用Iterator进行循环时,我不知道如何访问它的成员.

在我的代码中,行--- >> cout <<""<<*Iter;

如何打印成员的内容?喜欢*Iter.m_PackLine ???

不确定我是否使用了正确的术语,但感谢您的帮助!谢谢

class CFileInfo
{
  public:
      std::string m_PackLine;
      std::string m_FileDateTime;
      int m_NumDownloads;
};

void main()
{
  CFileInfo packInfo;

  vector<CFileInfo, CFileInfo&> unsortedFiles;
  vector<CFileInfo, CFileInfo&>::iterator Iter;

  packInfo.m_PackLine = "Sample Line 1";
  packInfo.m_FileDateTime = "06/22/2008 04:34";
  packInfo.m_NumDownloads = 0;
  unsortedFiles.push_back(packInfo);

  packInfo.m_PackLine = "Sample Line 2";
  packInfo.m_FileDateTime = "12/05/2007 14:54";
  packInfo.m_NumDownloads = 1;
  unsortedFiles.push_back(packInfo);

 for (Iter = unsortedFiles.begin(); Iter != unsortedFiles.end(); Iter++ )
 {
    cout << " " << *Iter; // !!! THIS IS WHERE I GET STUMPED
    // How do I output values of the object members? 
 }
}  // end main
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 16

cout << " " << *Iter;
Run Code Online (Sandbox Code Playgroud)

只有在可以输出结构CFileInfo的重载时才会起作用operator<<.您可以输出结构的各个成员,如下所示:

cout << " " << Iter->m_PackLine;
Run Code Online (Sandbox Code Playgroud)

或者,以下内容相当于:

cout << " " << (*Iter).m_PackLine;
Run Code Online (Sandbox Code Playgroud)

你必须在*Iter周围加上括号,因为成员访问运算符会绑定更严格的.

在side-node上,使main函数返回int而不是void.使其返回void在C++中无效.


你声明这样的向量:

vector<CFileInfo, CFileInfo&> unsortedFiles;
Run Code Online (Sandbox Code Playgroud)

第二个论点vector应该是另一回事.您的代码不需要为向量提供第二个参数.只要用这个:

vector<CFileInfo> unsortedFiles;
Run Code Online (Sandbox Code Playgroud)

我注意到的另一件事是你使用Iter++(调用postfix increment)增加迭代器.对于迭代器,总是更喜欢++Iter,这被称为prefix increment.