orl*_*rlp 11 c++ iterator semantics
对于非常模糊的标题我很抱歉,我真的不知道如何标题这个问题.
假设我有这个:
std::list<std::string> msgs;
for (std::list<std::string>::iterator it = msgs.begin(); it < msgs.end(); it++) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这很难读.这std::list<std::string>::iterator几乎看起来像一个神奇的数字,特别是如果声明msgs很远,就像在头文件中一样.IMO它会更容易阅读,如果它是这样的话更加语义:
std::list<std::string> msgs;
for (msgs.iterator it = msgs.begin(); it < msgs.end(); it++) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,这显然是非法的C++.但我的问题是,是否有一种方法可以实现支持编写像这样的迭代器声明的东西?
sti*_*ijn 16
如果你提供一个typedef,它会让生活变得更轻松:
typedef std::list<std::string>::iterator ListIterator;
for( ListIterator it = msgs.begin(); it != msgs.end(); ++it ){}
Run Code Online (Sandbox Code Playgroud)
除此之外,c ++ 0x通过提供auto关键字为您完成:
for( auto it = msgs.begin(); it != msgs.end(); ++it ){}
Run Code Online (Sandbox Code Playgroud)
编辑就像5年后的日期,但我更新了<tp !=并使用preincrement,因为这实际上是我多年来一直在做的事情,对我来说更有意义,到了它让我想知道我是如何编写这个答案而不是使用它
| 归档时间: |
|
| 查看次数: |
3031 次 |
| 最近记录: |