- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对为自定义类实现迭代器感到困惑。我正在尝试为 std::set 实现一个迭代器,其中我的 Vertex 类声明为:
class Vertex{
public:
int i, j;
std::set<Vertex*> adj; //references to adjacent vertices
Vertex();
~Vertex();
//end constructors
/** must overload for set<Vertex> to function */
const bool operator < (const Vertex &o) const;
};//END class Vertex
但是如果我定义
iterator<Vertex*> begin(){
return iterator<Vertex*>( *this, 0 );
}
iterator>Vertex*> end(){
return iterator<Vertex*>( *this, sizeof(Vertex) );
}
这样我就可以像这样迭代:
set<Vertex*>::iterator it;
//for all vertices adjacent of cur
for(it = cur.begin(); it != cur.end(); it++){
//...
}
并收到这些错误:
In file included from Vertex.cc:8:0:
Vertex.h:50:22: error: wrong number of template arguments (1, should be 5)
std::iterator<Vertex*> begin();
^
In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algoba
se.h:65:0,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_tree.h
:61,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\set:60,
from Vertex.h:10,
from Vertex.cc:8:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_iterator_base_types.h:118:12
: error: provided for 'template<class _Category, class _Tp, class _Distance, cla
ss _Pointer, class _Reference> struct std::iterator'
struct iterator
^
In file included from Vertex.cc:8:0:
Vertex.h:50:31: error: invalid type in declaration before ';' token
std::iterator<Vertex*> begin();
^
Vertex.h:51:22: error: wrong number of template arguments (1, should be 5)
std::iterator<Vertex*> end();
<additional errors>
ss _Pointer, class _Reference> struct std::iterator'
struct iterator
^
Vertex.cc:114:29: error: invalid use of 'this' in non-member function
return iterator<Vertex*>( *this, 0 );
^
Vertex.cc: At global scope:
Vertex.cc:116:1: error: invalid use of template-name 'std::iterator' without an
argument list
iterator>Vertex*> end(){
^
Vertex.cc: In function 'int begin()':
Vertex.cc:115:1: warning: control reaches end of non-void function [-Wreturn-typ
e]
}
^
make: *** [Vertex.o] Error 1
我需要帮助弄清楚如何去做这件事;我发现大多数教程/链接也令人困惑。注意:我没有使用 C++11
最佳答案
这里涉及两个步骤:
iterator
的类型在你的里面Vertex
类。begin
和 end
正确使用该迭代器类型。因为您希望遍历底层 set
在这里,让我们将 Vertex
导出的迭代器类型设为class 是 set 提供的迭代器类型。你可以通过写作来做到这一点
class Vertex{
public:
int i, j;
std::set<Vertex*> adj; //references to adjacent vertices
Vertex();
~Vertex();
//end constructors
/** must overload for set<Vertex> to function */
const bool operator < (const Vertex &o) const;
typedef std::set<Vertex*>::iterator iterator;
iterator begin();
iterator end();
};//END class Vertex
现在,我们可以定义begin
和 end
如下:
Vertex::iterator Vertex::begin() {
return adj.begin();
}
Vertex::iterator Vertex::end() {
return adj.end();
}
现在可以让你写这样的东西了
Vertex v = /* ... */;
for (Vertex::iterator itr = v.begin(); itr != v.end(); ++itr) {
/* ... */
}
或
Vertex v = /* ... */
for (auto& adj: v) {
/* ... */
}
尽管如此,您还是可以清理这段代码。对于初学者,您可能不应该制作 i
, j
, 和 adj
民众;这违反了封装原则。将这些数据成员设为私有(private)并提供成员函数来访问这些值。
这里的另一个细节是您实际上不需要定义 operator<
这里。您需要定义 operator<
如果您将直接在 set
中存储给定类型的对象或者作为 map
中的键, 但在这里你存储了指向 Vertex
的指针 es 在 set
里面和 map
.因此,除非你真的想要 operator<
以后可用,我不会担心定义 operator<
.您可以删除它。
希望这对您有所帮助!
关于具有自定义 Vertex 类的 C++ std::set<Vertex> 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767525/
如果您有超过 1 个具有相同类名的(动态)文本框,并使用 jquery 循环遍历每个所述文本框,您是否可以假设每次选择文本框的顺序都是相同的? 示例: 文本框 1 值 = 1文本框 2 值 = 2文本
有人知道为什么这段代码无法顺利运行吗?它似乎不喜欢使用yield关键字进行迭代:我正在尝试从任何级别的列表或字典中挖掘所有数字(对列表特别感兴趣)。在第二次迭代中,它找到 [2,3] 但无法依次打印
我关于从 mysql 数据库导出数据并将其保存到 Excel 文件(多表)的创建脚本。我需要让细胞动态基因化。该脚本正确地显示了标题,但数据集为空。当我“回显”$value 变量时,我检查了数据是否存
我正在尝试在 Python 中运行模拟,由此我绘制了一个数组的随机游走图,给定了两个变量参数的设定水平。 但是,我遇到了一个问题,我不确定如何迭代以便生成 250 个不同的随机数以插入公式。例如我已经
我是学习 jquery 的新手,所以如果这是一个相对简单的问题,我深表歉意。我有一个 ID 为 ChartstoDisplay 的 asp.net 复选框列表。我正在尝试创建 jquery 来根据是否
我正在尝试根据在任意数量的部分中所做的选择找出生成有效案例列表的最佳方法。也许它不是真正的算法,而只是关于如何有效迭代的建议,但对我来说这似乎是一个算法问题。如果我错了,请纠正我。实现实际上是在 Ja
如果我使用 sr1 为 www.google.com 发送 DNSQR,我会收到几个 DNSRR(s) 作为回复,例如(使用 ans[DNSRR].show() 完成): ###[ DNS Resou
假设有这样一个实体类 @Entity public class User { ... public Collection followers; ... } 假设用户有成千上万的用户关注者。我想分页..
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Nested jQuery.each() - continue/break 这是我的代码: var steps =
我刚从 F# 开始,我想遍历字典,获取键和值。 所以在 C# 中,我会说: IDictionary resultSet = test.GetResults; foreach (DictionaryEn
我知道已经有很多关于如何迭代 ifstream 的答案,但没有一个真正帮助我找到解决方案。 我的问题是:我有一个包含多行数据的txt文件。 txt 文件的第一行告诉我其余数据是如何组成的。例如这是我的
我有 12 个情态动词。我想将每个模态的 .modal__content 高度与 viewport 高度 进行比较,并且如果特定模态 .modal__content 高度 vh addClass("c
在此JSFiddle (问题代码被注释掉)第一次单击空单元格会在隐藏输入中设置一个值,并将单元格的背景颜色设置为绿色。单击第二个空表格单元格会设置另一个隐藏输入的值,并将第二个单元格的背景颜色更改为红
这是一个非常具体的问题,我似乎找不到任何特别有帮助的内容。我有一个单链表(不是一个实现的链表,这是我能找到的全部),其中节点存储一个 Student 对象。每个 Student 对象都有变量,尽管我在
有没有办法迭代 IHTMLElementCollection? 比如 var e : IHTMLLinkElement; elementCollection:IHTMLElementCollect
我正在尝试用 Java 取得高分。基本上我想要一个 HashMap 来保存 double 值(因此索引从最高的 double 值开始,这样我更容易对高分进行排序),然后第二个值将是客户端对象,如下所示
我想在宏函数中运行 while/until 循环,并限制其最大迭代次数。我找到了如何在“通常”sas 中执行此操作: data dataset; do i=1 to 10 until(con
Iterator iterator = plugin.inreview.keySet().iterator(); while (iterator.hasNext()) { Player key
晚上好我有一个简单的问题,我警告你我是序言的新手。假设有三个相同大小的列表,每个列表仅包含 1、0 或 -1。我想验证对于所有 i,在三个列表的第 i 个元素中,只有一个非零。 此代码针对固定的 i
我在 scheme 中构建了一个递归函数,它将在某些输入上重复给定函数 f, n 次。 (define (recursive-repeated f n) (cond ((zero? n) iden
我是一名优秀的程序员,十分优秀!