我想我已经正确地声明了一个带有对象的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
.