有时我需要使用一个元组,例如我有坦克和他们的目标坦克列表(他们追逐他们或类似的东西):
List<Tuple<Tank,Tank>> mylist = new List<Tuple<Tank,Tank>>();
Run Code Online (Sandbox Code Playgroud)
然后当我遍历列表时,我访问它们
mylist[i].item1 ...
mylist[i].item2 ...
Run Code Online (Sandbox Code Playgroud)
这是非常令人困惑的,我总是忘记什么是item1和什么是item2,如果我可以通过以下方式访问它们:
mylist[i].AttackingTank...
mylist[i].TargetTank...
Run Code Online (Sandbox Code Playgroud)
它会更清楚,有没有办法在没有定义类的情况下完成它:
MyTuple
{
public Tank AttackingTank;
public Tank TargetTank;
}
Run Code Online (Sandbox Code Playgroud)
我想避免定义这个类,因为那时我将不得不在不同的场景中定义许多不同的类,我可以做一些"技巧"并使这个匿名.
就像是 :
var k = new {Name = "me", phone = 123};
mylist.Add(k);
Run Code Online (Sandbox Code Playgroud)
当然,我定义它时没有类型传递给List的问题
我有一个包含数百万行的文件,每行有3个以空格分隔的浮点数.读取文件需要花费大量时间,因此我尝试使用内存映射文件读取它们,但发现问题不在于IO的速度,而在于解析速度.
我当前的解析是获取流(称为文件)并执行以下操作
float x,y,z;
file >> x >> y >> z;
Run Code Online (Sandbox Code Playgroud)
Stack Overflow中的某些人建议使用Boost.Spirit,但我找不到任何简单的教程来解释如何使用它.
我正在尝试找到一种简单有效的方法来解析看起来像这样的行:
"134.32 3545.87 3425"
Run Code Online (Sandbox Code Playgroud)
我真的很感激一些帮助.我想用strtok来分割它,但我不知道如何将字符串转换为浮点数,我不太确定它是最好的方法.
我不介意解决方案是否会提升.我不介意它是不是有史以来最有效的解决方案,但我确信它可以加倍速度.
提前致谢.
我在CUDA上工作了很多,并且在CPU上做了很多工作,我正在努力理解两者之间的区别.我的I5处理器有4个内核,售价200美元,我的NVidia 660有960个内核,成本差不多.
如果有人能够解释两种处理单元架构在能力优劣方面的主要区别,我会非常高兴.例如,CUDA核心是否有分支预测?
这对我来说很奇怪,我希望它是一个哈希表.
我在下面的答案中看到了3个理由(这可能是正确的,但我不认为它们是真正的原因). 哈希表v自我平衡搜索树
虽然哈希可能不是一个简单的操作.我认为对于大多数类型来说它非常简单.
当你使用map时,你会期望能够分期付款的东西O(1)insert,delete,find,not log(n).
我同意树木的最坏情况表现更好.
我认为有更大的理由,但我无法弄明白.在c#中,例如Dictionary是一个哈希表.
在以下教程中:http://www.albahari.com/threading/
他们说以下代码:
for (int i = 0; i < 10; i++)
new Thread (() => Console.Write (i)).Start();
Run Code Online (Sandbox Code Playgroud)
是非确定性的,可以产生以下答案:
0223557799
我认为当使用lambda表达式时,编译器会创建某种匿名类,通过在捕获类中创建类似它们的成员来捕获正在使用的变量.但是i
值类型,所以我认为他应该被价值复制.
我的错在哪里?
如果答案将解释闭包如何工作,如何保存特定int的"指针",在这种特定情况下生成了什么代码,那将非常有用?
我搜索了如何在互联网上正确实现+运算符,我找到的所有结果都执行以下步骤:
const MyClass MyClass::operator+(const MyClass &other) const
{
MyClass result = *this; // Make a copy of myself. Same as MyClass result(*this);
result += other; // Use += to add other to the copy.
return result; // All done!
}
Run Code Online (Sandbox Code Playgroud)
关于这个"过程"我几乎没有问题:
以这种方式实现+运算符不是那么愚蠢,它在第一行调用赋值运算符(复制类),然后在返回中调用复制构造函数(由于返回的事实,它也复制了类)按价值,所以它破坏了第一个副本并创建了一个新的......坦白说,这并不是很聪明......)
当我写a = b + c时,b + c部分创建该类的新副本,然后'a ='部分将副本复制给自己.谁删除了b + c创建的副本?
有没有更好的方法来实现+运算符而不需要两次处理类,也没有任何内存问题?
提前致谢
我想做一些非常简单的事情,但似乎我不明白SortedDictionary
.
我要做的是以下内容:
创建一个排序字典,按一些浮点数对我的项目进行排序,因此我创建了一个类似于此的字典
SortedDictionary<float, Node<T>> allNodes = new SortedDictionary<float, Node<T>>();
Run Code Online (Sandbox Code Playgroud)
现在我添加项目后,我想逐个删除它们(每次删除都应该从最小到最大的复杂度为O(log(n)).
我该怎么做?我认为这只allNodes[0]
会给我最小的,但事实并非如此.
更重要的是,似乎字典无法处理重复的键.我觉得我使用的是错误的数据结构......
如果我有一堆节点需要按照它们的距离(浮点)进行排序,我应该使用其他东西吗?
我想扩展std :: string并添加"equals".所以我做了以下事情:
#define Equals(str1) compare(str1) == 0
Run Code Online (Sandbox Code Playgroud)
并使用以下代码:
if ( str.Equals("hhhhllll") )
Run Code Online (Sandbox Code Playgroud)
其中(我假设)编译
if ( str.compare("hhhhllll") == 0 )
Run Code Online (Sandbox Code Playgroud)
一切都很好.
现在我想改进我的宏,添加括号来编译
if ( (str.compare("hhhhllll") == 0) )
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
#define (str).Equals(str1) (str.compare(str1) == 0)
Run Code Online (Sandbox Code Playgroud)
但它不会编译(宏根本不适合)
我怎样才能实现它?
我有以下成员函数:
Person ClassB::DoSomethingAndReturnPerson()
{
RAIIMutex myLock(&m_mutex);
return m_person;
}
Run Code Online (Sandbox Code Playgroud)
RAIIMutex
是一个辅助类,它接收互斥锁并将其锁定在构造函数中并在析构函数中释放.
m_person
是类型Person
(尺寸非常小).其他线程中的其他函数可能会更改此成员.
我希望m_person
按值返回(返回副本),当然我想避免m_person
在返回时复制另一个线程时被更改的情况,所以我添加了锁.
但首先会发生什么?编译器是先创建一个m_person
或者先调用析构函数的副本myLock
吗?
从理论上讲,它可以通过这样的方式轻松解决:
Person ClassB::DoSomethingAndReturnPerson()
{
RAIIMutex myLock(&m_mutex);
Person tmp = m_person;
return tmp;
}
Run Code Online (Sandbox Code Playgroud)
但我很想知道我的问题的答案.
谢谢
我正在开发一款游戏,让我们说玩家在位置x = 100,y = 100并且爆炸半径为100个单位时放置炸弹......我很容易在游戏中找到所有"项目"被爆炸的炸弹击中(只需要检查他们与炸弹的距离是否低于100).
但现在我想考虑到我在游戏中遇到的障碍,障碍物是正方形,总是64*64像素,总是与轴对齐(不旋转)..我想知道一个项目是否"隐藏"背后知道他没被击中的障碍......
这样的事情:
右边的家伙没有被击中,但是底部的家伙被打了,我把灰色打到了打击区域,绿色的区域被隐藏了......
我的想法是:1.找到的所有项目在现场看到,从炸弹的距离越低则100 2.找到场景中的所有障碍,从炸弹的距离越低则100.3.计算从线炸弹中心的物品..然后检查线是否与任何障碍物相交,如果没有......你被击中了.
最后,问题1.有没有人有更好的主意?2.有免费的开源c#兼容引擎可以帮助我吗?Box2d可以帮到我吗?
谢谢
math collision-detection game-physics computational-geometry