这是最好的方式吗?
var set2 = new HashSet<reference_type>();
Run Code Online (Sandbox Code Playgroud)
用这样的foreach遍历集合.
foreach (var n in set)
set2.Add(n);
Run Code Online (Sandbox Code Playgroud)
或者像这样使用像union这样的东西.
set2 = set.UnionWith(set); // all the elements
Run Code Online (Sandbox Code Playgroud) 这是我的一些代码的简化版本:
public struct info
{
public float a, b;
public info? c;
public info(float a, float b, info? c = null)
{
this.a = a;
this.b = b;
this.c = c;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是Struct member 'info' causes a cycle in the struct layout.我在结构之后的错误,就像值类型行为一样.我可以使用类和克隆成员函数来模拟这个,但我不明白为什么我需要.
这个错误怎么样?在某些类似的情况下,递归可能会永远导致构造,但在这种情况下我无法想到它的任何方式.下面是程序编译时应该没问题的例子.
new info(1, 2);
new info(1, 2, null);
new info(1, 2, new info(3, 4));
Run Code Online (Sandbox Code Playgroud)
编辑:
我使用的解决方案是使"info"成为一个类而不是一个struct,并给它一个成员函数来返回我在传递它时使用的副本.实际上模拟与结构相同但具有类的行为.
我在寻找答案时也创建了以下问题.
int a, b, n;
...
(a, b) = (2, 3);
// 'a' is now 2 and 'b' is now 3
Run Code Online (Sandbox Code Playgroud)
这种事情在C#中真的很有帮助.在这个例子中,'a'和'b'没有被封装在一起,例如位置的X和Y可能是.这是否以某种形式存在?
下面是一个不太重要的例子.
(a, b) = n == 4 ? (2, 3) : (3, n % 2 == 0 ? 1 : 2);
Run Code Online (Sandbox Code Playgroud)
Adam Maras在评论中表示:
var result = n == 4 ? Tuple.Create(2, 3) : Tuple.Create(3, n % 2 == 0 ? 1 : 2);
Run Code Online (Sandbox Code Playgroud)
然而,当他指出它创建一个新的三元组而不是更改指定的值时,上述示例的工作类型.
Eric Lippert要求用例,因此可能:
(a, b, c) = (c, a, b); // swap or reorder on one …Run Code Online (Sandbox Code Playgroud) class my_class
{
public int add_1(int a, int b) {return a + b;}
public func<int, int, int> add_2 = (a, b) => {return a + b;}
}
Run Code Online (Sandbox Code Playgroud)
add_1是一个函数,而add_2是一个委托.然而,在这种情况下,代表们可以填补类似的角色.
由于先例和语言的设计,C#方法的默认选择应该是函数.
然而,这两种方法都有利有弊,所以我已经制作了一份清单.这两种方法都有任何优点或缺点吗?
传统方法的优点.
"委托类型字段"方法的优点.
我正在使用Qt Creator使用C++ 11.
"warning: identifier 'nullptr' is a keyword in C++11 [-Wc++0x-compat]"
"error: 'nullptr' was not declared in this scope"
Run Code Online (Sandbox Code Playgroud)
这是在其他地方工作的代码,相关部分是:
... = nullptr;
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
这不是一个关键字,它的范围不是全球性的吗?
如果我要创建一个名为基类base和派生类叫derived_1,derived_2等...我用的是基类的实例的集合,然后当我取回的元素,并尝试使用它,我会发现C++认为它的类型是基类的,可能是因为我从一个基类中检索到它std::vector.当我想使用仅存在于特定派生类的特征时,这是一个问题,我知道这个对象是我将它放入向量时的类型.
所以我将元素转换为它应该是的类型,并发现这不起作用.
(derived_3)obj_to_be_fixed;
Run Code Online (Sandbox Code Playgroud)
并记得这是一个指针的事情.经过一些调整后,现在已经奏效了.
*((derived_3*)&obj_to_be_fixed);
Run Code Online (Sandbox Code Playgroud)
这是正确的,还是有一个abc_cast()功能可以减少混乱?
编辑:
我不得不把它扩展到另一个问题,那里展示了完整的解决方案.stackoverflow.com ... why-the-polymorphic-types-error-and-cleanup-question
我从这里下载了一个C#区间树集合类类http://intervaltree.codeplex.com/SourceControl/list/changesets - >右侧 - >下载.
但是我无法在我的Microsoft Visual C#2010 Express(也运行C#XNA)上打开整个项目,因为
此版本的应用程序不支持解决方案文件夹
另外,我只想在我自己的seprate项目中单独使用该类.
我试图复制三个重要的看似文件Interval.cs,IntervalNode.cs并IntervalTree.cs进入我的项目,但这产生了编译错误
没有导入器可以处理此文件类型
我还尝试将三个文件的内容复制并粘贴到我的项目中,将它们封装到自己的命名空间中,并且有很多代码.我不得不稍微重新安排一些使用,但遇到了可能需要PowerCollections .dll和.pcb文件作为using Wintellect.PowerCollections;原因的问题
找不到类型或命名空间名称'Wintellect'(您是否缺少using指令或程序集引用?)
我不知道如何继续,或者如果我正在做正确的事情,如何让这个班级工作.
是否有像图表这样的树的名称,其中节点可以有多个父节点,但仍然只有1级以上.
因此,该图是有向的和非循环的,但它也有其他约束.
这也意味着,从任何特定节点返回到根的所有路径都是相同的长度.
显然,这可以用于显示字符串是否为数字,例如"12.5"== yes,"abc"== no.但是我得到了一个没有注意的输入.
std::stringstream ss("2");
double d; ss >> d;
if(ss.good()) {std::cout<<"number"<<std::endl;}
else {std::cout<<"other"<<std::endl;}
Run Code Online (Sandbox Code Playgroud) 编译很好,虽然我不想尝试运行它.但是......
//class base;
//class derived;
//class derived : public base;
class base {};
class derived : public base {};
class other
{
public:
void func() {base1 = derived1;}
base* base1;
derived* derived1;
};
void main()
{
}
Run Code Online (Sandbox Code Playgroud)
...将其他类移到base的定义之上并派生出来,我必须在myne程序中执行类似的操作会导致编译错误.
显而易见的解决方案是转发声明base和派生显示在代码顶部注释掉,但这会导致无法在base*和derived*error之间进行转换.尝试转发声明包括继承信息也不起作用.
c# ×5
c++ ×4
class ×3
.net ×1
abstraction ×1
base ×1
base-class ×1
c++11 ×1
casting ×1
collections ×1
constructor ×1
delegates ×1
derived ×1
function ×1
graph ×1
member ×1
nullptr ×1
numbers ×1
qt-creator ×1
shallow-copy ×1
stringstream ×1
struct ×1
terminology ×1
traversal ×1
tree ×1
tuples ×1
union ×1
words ×1