小编bit*_*oon的帖子

C++:指针作为哈希表中的键

在程序运行期间使用指针作为哈希表键是否有任何问题?(无需存储到磁盘并在以后使用它,因为这会导致明显的问题)

在许多情况下,我需要快速了解对象是否属于某个对象管理器.检查它的一种快速方法是将对象管理器中的每个对象存储在哈希表中,其中对象的指针是实际对象的键:例如,HashTable

c++ pointers hashtable

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

线和线段交叉点

如何检测直线(方向d和-d从点p)和线段(在点p1和p2之间)是否在2D中相交?如果他们这样做,我怎么能得到他们的交叉点.

有很多例子可以检测两个线段是否相交,但这应该更简单.

我找到了这个,但我不明白什么是副操作员:http: //www.loria.fr/~lazard//ARC-Visi3D/Pant-project/files/Line_Segment_Line.html

math geometry intersection line

7
推荐指数
2
解决办法
5753
查看次数

具有快速indexOf的数据结构?

我需要一个带有O(1)indexOf操作的有序数据结构.我将对象指针存储在数据结构中.有任何想法吗?某种LinkedHashMap?

看看"indexOf"是什么意思: List.indexOf(Object)

java indexing data-structures

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

C++析构函数:当内存被释放时?

如果我删除了一个导致其析构函数被调用的对象,那么在析构函数完成函数中的任何操作之前或之后是否释放了内存?

c++ destructor

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

C++:static一次初始化一个数组成员,成员

我现在可以在全球范围内做到这一点,一切正常:

const char* Foo::bars[3] = {"a", "b", "c"};
Run Code Online (Sandbox Code Playgroud)

但我想这样做是因为这更加清晰和自我记录(特别是如果你使用Enums作为索引):

const char* Foo::bars[3];
bars[0] = "a";
bars[1] = "b";
bars[2] = "c";
Run Code Online (Sandbox Code Playgroud)

无论如何可能吗?

我知道我可以在函数内部执行此操作(例如,类的构造函数)但是如果在程序的开头没有调用构造函数并且我想使用静态数组呢?这导致了问题.

c++ arrays static initialization

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

C++:Singleton的替换

我经常使用单例,因为我讨厌将主类的对象传递给成员类,以便允许它们访问主类.

Class Foo
{
    A* a;
    B* b;
    C* c;
};
Run Code Online (Sandbox Code Playgroud)

例如,在上面的例子中,如果A,B和C想要访问Foo-我将不得不传递Foo的每一个对象,并将其存储为其成员变量(或在每个函数调用中给出对象).这有效,但感觉不对,需要更多的代码编写.

相反,我可以让Foo成为单身人士(当然只有当只有1个实例时)然后从A,B和C调用Foo :: getInstance() - > ....而且我不需要传递任何对象.我发现这非常方便.

现在,问题是我的情况可能有多个Foo实例.显然我不能使用单身模式.但我不想传递变量,也不想将它们存储在成员类中.代码太多了!:)

举个例子,我讨厌这个:

A::A(Foo* foo) : m_foo(foo)
{

}
Run Code Online (Sandbox Code Playgroud)

还有这个:

void A::someFunc(Foo* foo, int someParam)
{

}
Run Code Online (Sandbox Code Playgroud)

但是,我喜欢这个:

A::A()
{

}

void A::someFunc(int someParam)
{
    Foo* foo = Foo::getInstance();
}
Run Code Online (Sandbox Code Playgroud)

还有其他办法吗?类似于单身人士模式的东西?

c++ singleton class

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