小编Xav*_*det的帖子

返回'任何类型的输入迭代器'而不是vector :: iterator或list :: iterator

假设我想在C++中实现一个数据结构来存储面向图.由于STL容器,Arcs将存储在节点中.我希望用户能够以类似STL的方式迭代节点的弧.

我遇到的问题是我不希望在Node类(实际上是一个抽象基类)中公开我将在具体类中实际使用的STL容器.因此,我不希望我的方法返回std :: list :: iterator或std :: vector :: iterator ...

我试过这个:

class Arc;

typedef std::iterator<std::random_access_iterator_tag, Arc*> ArcIterator;  // Wrong!

class Node {
public:
  ArcIterator incomingArcsBegin() const {
    return _incomingArcs.begin();
  }
private:
  std::vector<Arc*> _incomingArcs;
};
Run Code Online (Sandbox Code Playgroud)

但这不正确,因为vector :: const_iterator不能用于创建ArcIterator.那么这个ArcIterator可以是什么?

我发现这篇论文关于STL的自定义迭代器,但它没有帮助.我今天一定有点沉重......;)

c++ iterator stl

2
推荐指数
1
解决办法
3330
查看次数

模板函数如何"知道"作为模板参数给出的数组的大小?

在下面的C++代码中,模板化的Check函数给出的输出不是我想要的:它是1而不是3.我怀疑K映射到int*,而不是int[3](是一个类型?).我希望它给出与第二个(非模板化)函数相同的输出,我明确给出了数组的大小...

如果没有使用宏,有没有办法编写一个接受单个参数但仍知道数组大小的Check函数?

#include <iostream>
using namespace std;

int data[] = {1,2,3};

template <class K>
void Check(K data) {
  cout << "Deduced size: " << sizeof(data)/sizeof(int) << endl;
}

void Check(int*, int sizeofData) {
  cout << "Correct size: " << sizeofData/sizeof(int) << endl;
}

int main() {
  Check(data);
  Check(data, sizeof(data));
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

PS:在实际代码中,数组是一个结构数组,必须迭代才能进行单元测试.

c++ templates sizeof

2
推荐指数
1
解决办法
1790
查看次数

为什么 `zip` 会从第一个迭代器中多吃一个元素?

我正在学习 Effective Python(第 2 版)中的第 76 条,但遇到了一个我不理解的案例。具体来说,我不明白为什么要zip消耗其第一个参数的一个额外元素。考虑以下代码:

l1 = []
l2 = [1]
l1_it = iter(l1)
l2_it = iter(l2)
test_it = zip(l2_it, l1_it)
_ = list(test_it):

try:
    next(l2_it)
except StopIteration:
    print('This should not happen')
Run Code Online (Sandbox Code Playgroud)

这实际上打印This should not happen,我觉得这非常令人惊讶。我希望zip将其第一个参数保留在仍有一个元素要检索的状态。事实是,如果我使用zip(l1_it, l2_it)(即最短的列表在前),那么我确实可以在next(l2_it)不触发异常的情况下调用。

这是预期的吗?

python python-3.x

1
推荐指数
1
解决办法
52
查看次数

如何将类作为参数提供给Python函数

我的(第一个!)Python程序中有两个函数,只有必须实例化的类才有所不同.

def f(id):
    c = ClassA(id)
    ...
    return ...

def g(id):
    c = ClassB(id)
    ...
    return ...    
Run Code Online (Sandbox Code Playgroud)

为了避免重复代码,我希望能够编写一个单独的函数,以某种方式接受该类作为参数进行实例化.

def f(id):
    return f_helper(id, ... ClassA ...)

def g(id):
    return f_helper(id, ... ClassB ...)

def f_helper(id, the_class):
    c = ... the_class ... (id)
    ...
    return ...
Run Code Online (Sandbox Code Playgroud)

我很确定这是可能的,但没有找到......

python

0
推荐指数
1
解决办法
199
查看次数

标签 统计

c++ ×2

python ×2

iterator ×1

python-3.x ×1

sizeof ×1

stl ×1

templates ×1