我有一个如下的生成器函数:
def myfunct():
...
yield result
Run Code Online (Sandbox Code Playgroud)
调用此函数的常用方法是:
for r in myfunct():
dostuff(r)
Run Code Online (Sandbox Code Playgroud)
我的问题是,有什么方法可以随时从发电机中获取一个元素吗?例如,我想做类似的事情:
while True:
...
if something:
my_element = pick_just_one_element(myfunct())
dostuff(my_element)
...
Run Code Online (Sandbox Code Playgroud) 每个标准容器具有begin和end方法,返回的迭代器是容器.然而,C++ 11显然已经引入自由函数调用std::begin和std::end该调用begin和end成员函数.所以,而不是写作
auto i = v.begin();
auto e = v.end();
Run Code Online (Sandbox Code Playgroud)
你会写的
using std::begin;
using std::end;
auto i = begin(v);
auto e = end(v);
Run Code Online (Sandbox Code Playgroud)
在他的演讲中,编写现代C++,Herb Sutter说当你想要容器的开始或结束迭代器时,你应该总是使用自由函数.但是,他没有详细说明你想要的原因.查看代码,它可以为您节省一个字符.因此,就标准容器而言,自由函数似乎完全没用.Herb Sutter表示非标准容器有好处,但他再次没有详细说明.
因此,问题是除了调用相应的成员函数版本之外,自由函数版本究竟做了什么,std::begin并且std::end做了什么,为什么要使用它们呢?
我想知道为什么cbegin并cend在C++ 11中引入?
什么情况下使用这些方法时,使得从常量重载的差异begin和end?
我是Java新手,我真的很困惑iterator和iterable.任何人都可以向我解释并举一些例子吗?
为什么Iterator界面没有扩展Iterable?
该iterator()方法可以简单地返回this.
它是故意还是只是对Java设计师的监督?
能够使用像这样的迭代器的for-each循环会很方便:
for(Object o : someContainer.listSomeObjects()) {
....
}
Run Code Online (Sandbox Code Playgroud)
where listSomeObjects()返回一个迭代器.
有一个iterator对象,有没有比列表理解更快,更好或更正确的东西来获取迭代器返回的对象列表?
user_list = [user for user in user_iterator]
Run Code Online (Sandbox Code Playgroud) 所以我在这样的范围内迭代:
(1..100).each do |n|
# n = 1
# n = 2
# n = 3
# n = 4
# n = 5
end
Run Code Online (Sandbox Code Playgroud)
但我想做的是迭代10.
因此,不是增加n1,而是下一个n实际上是10,然后是20,30等.
在C++中,a的类型是std::map<>::iterator什么?
我们知道it类型的对象std::map<A,B>::iterator有一个重载operator ->,它返回一个std::pair<A,B>*,并且std::pair<>有一个first和second成员.
但是,这两个成员对应的是什么,为什么我们必须访问存储在地图中的值it->second?
我正在努力学习C++,请原谅我,如果这个问题表明缺乏基础知识,你看,事实是,我缺乏基础知识.
我想要一些帮助来解决如何为我创建的类创建迭代器.
我有一个'Shape'类,它有一个容器点.我有一个类'Piece'引用一个Shape并定义Shape的位置.Piece没有Shape它只是引用一个Shape.
我希望它看起来像是一个Points的容器,它与它引用的Shape相同,但是添加了Piece的位置的偏移量.
我希望能够遍历Piece的点,就像Piece本身就是一个容器一样.我已经做了一点阅读,但没有找到任何帮助我的东西.我会非常感谢任何指针.