首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >作为空结构,我可以使用什么?

作为空结构,我可以使用什么?
EN

Stack Overflow用户
提问于 2013-10-20 15:13:37
回答 1查看 325关注 0票数 0

我想编写一个循环,遍历同一个结构的几个实例(在我的例子中称为edg ),这个循环由某个函数从一个邻居迭代到另一个,直到它返回一个元素,这个元素表示停止。我试着用空返回来编码它,但是它不起作用。我能用什么?

下面是一些代码,可能比我前面的单词更准确地解释了它:我的结构:

代码语言:javascript
运行
复制
struct edg{
int i,j,k;
edg(int a, int b, int c){
i = a; j = b; k = c; //I'm adding a constructor to it
}
}

我的迭代功能:

代码语言:javascript
运行
复制
edg neighbour(edg temp){
if(temp satisfies certain criterias){ return edg(new coordinates);}
else{ return NULL;}
}

我的循环:

代码语言:javascript
运行
复制
while(my_edg!=NULL){
my_edg = neighbour(my_edg);
}

我想我可以选择edg的某个值,将其定义为拒绝,并在循环中替换为:

代码语言:javascript
运行
复制
while(my_edg!=edg_marked_as_rejection)

但是,还有其他方法可以做到吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-20 15:23:41

请注意,您的功能:

代码语言:javascript
运行
复制
edg neighbour(edg temp){
    if(temp satisfies certain criterias){ return edg(new coordinates); }
    else{ return NULL; }
}

按值返回edg的实例,因此试图使用return NULL;是无效的(除非您已经定义了一些自定义转换)。在传递/通过指针返回时,NULL是一个可能的值,在本例中,这可能意味着将此函数的原型更改为:

代码语言:javascript
运行
复制
edg* neighbour(edg temp) { ... }

然而,基于语义,通过引用传递并返回指示成功的标志将更合理:

代码语言:javascript
运行
复制
bool neighbour(const edg& temp, edg& result) {
    if (...) {
        result = ...;
        return true;
    }
    return false;
}

或者,如果您的条件"if(temp satisfies certain criterias)“在大多数情况下都应该满足,并且这些条件没有得到满足,那么您也可以考虑抛出一个异常(而不是返回NULL)。

第三个选项可能是实现空对象设计模式,这意味着标记为“无效”的edg实例将被构造并返回,调用方将执行如下操作:

代码语言:javascript
运行
复制
edg n = neighbour(tmp);
if (!n.isValid()) {
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19479021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档