假设C++中有一个模板函数可以完成一些有用的工作,但也可以通过输出迭代器输出一系列值.现在假设这个值序列有时很有趣,但在其他值上没有用.在STL中是否有一个可以实例化的迭代器类,它可以被实例化并传递给函数,并将忽略函数尝试分配给输出迭代器的任何值?换句话说,将所有数据发送到/ dev/null?
尽管阅读了它,我仍然不太明白它是如何__iter__工作的.什么是简单的解释?
我见过def__iter__(self): return self.我不知道这是如何工作的或步骤如何工作.
我发现这个C++代码:
vector<int> a;
a.push_back(1);
a.push_back(2);
vector<int>::iterator it = a.begin();
a.push_back(4);
cout << *it;
Run Code Online (Sandbox Code Playgroud)
打印一些大的随机数; 但如果你a.push_back(3)在第3行和第4行之间添加,它将打印1.你能解释一下吗?
我读了为什么Java的迭代器不是Iterable?而为什么不枚举可迭代?,但我仍然不明白为什么这样:
void foo(Iterator<X> it) {
for (X x : it) {
bar(x);
baz(x);
}
}
Run Code Online (Sandbox Code Playgroud)
没有成功.换句话说,除非我遗漏了某些东西,否则上面可能是一个很好的有效语法糖:
void foo(Iterator<X> it) {
for (X x; it.hasNext();) {
x = it.next();
bar(x);
baz(x);
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个文件,我想在它们两个上执行一些按行操作.(换句话说,每个文件的第一行与第二行相对应,等等.)现在,我可以想到一些稍微麻烦的方法来同时迭代这两个文件; 然而,这是Python,所以我想有一些句法简写.
换句话说,是否有一些简单的方法来适应
for line in file:
Run Code Online (Sandbox Code Playgroud)
这样它可以同时从两个文件中提取数据?
我目前在Struts2和s:iterate标签方面遇到了一些困难.
我想显示一个标签,它是HashMap中的关键字,后面跟着一个表(HashMap中的值),其中包含了对于HashMap中每个元素的ArrayList中的每个元素.
例如,
label
----------
| test1 |
----------
| test2 |
----------
label2
----------
| test1 |
----------
| test2 |
----------
Run Code Online (Sandbox Code Playgroud)
我看了很多关于HashMap的例子,但没有找到我的案例.
我怎样才能做到这一点 ?
谢谢,
考虑以下简化示例和所需输出:
class A
{
class combined_iterator
{
????
}
typedef ??? t_combined_it;
t_combined_it begin();
t_combined_it end();
std::vector<int> m_Vec1, m_Vect2;
}
A a;
a.m_Vec1.push_back(1);
a.m_Vec2.push_back(2);
for (A::t_combined_it it = a.begin() ; it != a.end() ; it++) {
std::cout << *it << " ";
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 2
Run Code Online (Sandbox Code Playgroud)
我认为问题很清楚:我如何编写一个迭代器,使它看起来好像两个或多个其他迭代器实际上只是一个序列.因此,在示例中,我可以使用迭代器,而不是迭代m_Vec1和m_Vec2,迭代器首先迭代m_Vec1和m_Vec2的元素.
我发现以下问题我认为是相同的:创建一个遍历2个容器的c ++迭代器.这个问题没有好的答案; 原始提问者提出的解决方案似乎很复杂,而且(相对)内存密集型.
我通过将std :: vector :: iterator保持为我的自定义迭代器的成员,并将其与迭代的每个序列的.end()迭代器进行比较,尝试了一种天真的方法; 然而,似乎比较来自不同容器的迭代器是非法的(我希望它们只是为了返回'不相等' - 也许这是找到这个问题的解决方案的方向?我想不出如何但是要实现它.
在可能的情况下,如果相关,我想使用boost :: iterators,因为我在别处使用它们,我喜欢它为我的迭代器实现提供的同质性; 但是当然如果有人在不使用它们的情况下有想法,我可以自己动手,所以在这个意义上它们不是必需的.
如果我为迭代器使用默认构造函数,如何检查它是否稍后分配?
对于指针,我可以这样做:
int *p = NULL;
/// some code
if ( NULL == p ) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
如何为迭代器执行上述操作?有可能吗?
#include <iostream>
#include <list>
int main ()
{
std::list<int>::iterator it;
if ( NULL == it ) // this fails
{
std::cout<<"do stuff" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud) 这是来自queryset iterator()方法的django文档:
QuerySet通常在内部缓存其结果,以便重复的计算不会导致其他查询.相反,iterator()将直接读取结果,而不在QuerySet级别执行任何缓存(在内部,默认迭代器调用iterator()并缓存返回值).对于返回大量只需要访问一次的大量对象的QuerySet,这可以带来更好的性能并显着降低内存.
阅读之后,我仍然感到困惑:关于性能提升和内存减少的一线表明我们应该使用这种iterator()方法.有人可以提供一些好的和坏的案例iterator()使用的例子吗?
即使查询结果没有被缓存,如果他们真的想多次访问模型,有人只能做以下事情吗?
saved_queries = list(Model.objects.all().iterator())
Run Code Online (Sandbox Code Playgroud) 我正在进行一个练习,我有一个向量,我正在编写自己的反向算法,使用反向和正常(向前)迭代器来反转向量的内容.但是,我无法比较迭代器.
int vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
vector<int> numbers(vals, vals + 10);
vector<int>::iterator start = numbers.begin();
vector<int>::reverse_iterator end = numbers.rend();
Run Code Online (Sandbox Code Playgroud)
我有一个先前的算法,通过使用两个迭代器来反转向量,但是在这个任务中,我无法使用它们之间的!=运算符来比较它们.我的猜测是在向量中获取基础指针或索引,但我如何得到指针/索引?