小编Oop*_*ser的帖子

如何使用属性在c#中使用值类型?

我有一个名为小班Tank有一个叫做公共成员Location这是一个Rectangle(一个结构).我写的时候:

Tank t = new Tank();
t.Location.X+=10;
Run Code Online (Sandbox Code Playgroud)

一切正常,坦克移动.

但在我将成员更改为属性后,我再也无法使用此语法.它不编译,因为t.Location它现在是一个属性(它是函数)并返回该位置的临时副本(因为它是一个值类型).

我Location现在可以使用的唯一方法是做这样的事情:

k = t.Location 
k.X +=10;
t.Location = k;
Run Code Online (Sandbox Code Playgroud)

是否有任何解决方法可以帮助我不要编写这些丑陋的代码,并使用直观的a+=10;语法?

c# properties value-type

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

remove_if然后在向量上擦除效率?

虽然有关于vector的remove_if + erase有几十个问题.我找不到这种行为的表现.我写的时候:

    myVector.erase(remove_if(myVector.begin(),
                         myVector.end(),
                         some_predicate), myVector.end());
Run Code Online (Sandbox Code Playgroud)

remove if会将迭代器返回到最后一个相关项+ 1(让我们称之为X).我相信这会发生在O(n)中.

但擦除将如何工作?

  • 如果擦除将尝试从X删除到myVector.end(),它将是O(n ^ 2),因为它将导致将向量复制到新位置,并且将有来自堆的O(n)个新分配.
  • 但如果它将从myVector.end()删除到X,它可以在O(n)中执行,更重要的是不会分配新的内存(我试图避免的事情).

谢谢.

c++ performance vector std erase

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

使用 matplotlib 绘制 3D 绘图的两个 Z 轴

我正在尝试plot_trisurf使用以下代码进行绘图:

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_trisurf(X1,Y1,Z1)
ax.plot_trisurf(X2,Y2,Z2)
Run Code Online (Sandbox Code Playgroud)

Z1 和 Z2 的比例有几个数量级不同。

如何共享 X 和 Y 轴,但不共享 Z ?

在 2D 中,我有函数“twinx()”,但我找不到 3D 的解决方案。

python matplotlib

7
推荐指数
0
解决办法
703
查看次数

函数调用和C#中的事件之间是否存在性能差异?

我会试着澄清我的问题:

我有一个名为Draw的函数(有人(XNA)每秒调用她60次),我有很多要绘制的对象,所以我有以下代码:void Draw(){obj1.draw(); obj2.draw(); obj3.draw(); ....}

是否会产生性能影响,如果我将创建一个事件,将由Draw()引发,并且所有对象都会注册该事件?

如果我不清楚我要问的是:通过注册活动来呼叫功能是否与普通呼叫不同?

c# events delegates

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

如何查找Java + JNI + C++进程中的内存泄漏

我有一个用 java 编写的项目,使用 JNI 使用 C++ 库。所有的代码都是我们写的,所以我有所有的源代码。

几个小时后,机器内存不足,尽管我的进程只是迭代文件,并且与前一个文件相关的所有内存都被删除。

我确信存在内存泄漏,通常我使用Valgrind,但似乎他不能很好地应对Java,并且认为JVM正在泄漏,即使对于“hello world”java项目也是如此。

我已经通过单元测试测试了 C++ 部分(主要流程),并在单元测试中使用了 valgrind,但没有发现任何泄漏。这并不能证明任何事情,因为我可能会错过很多潜在的流程。

我的主要问题是,如何找到泄漏?

了解谁在消耗内存,是 Java 还是本机部分,这将非常有帮助?他们处于同一过程中。

谢谢。

c++ java memory java-native-interface memory-leaks

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

如何有效地从List <T>中删除(C#)?

如果我理解正确(如果我错了请纠正我),列表是由.NET中的数组实现的,这意味着列表中每个项目的删除都会导致重新分配所有列表(这意味着O(n)).

我正在开发一款游戏,在游戏中我有许多子弹在任何给定时刻在空中飞行,让我们说100个子弹,每帧我移动几个像素并检查与游戏中物体的碰撞,我需要删除从列表中每个碰撞的子弹.

所以我在另一个临时列表中收集了碰撞的子弹,然后执行以下操作:

foreach (Bullet bullet in bulletsForDeletion)
    mBullets.Remove(bullet);
Run Code Online (Sandbox Code Playgroud)

因为循环是O(n)和删除O(n),我花费O(n^2时间删除.

有没有更好的方法来删除它,或更合适的集合使用?

.net c# generics collections generic-collections

5
推荐指数
2
解决办法
985
查看次数

内存碎片是否会降低New/Malloc的速度?

背景短:

我正在开发一个应该运行数月并使用动态分配的系统.

问题:

我听说内存碎片减缓new和malloc运营商,因为他们需要在"洞"中的一个"发现"的地方,我留在了记忆,而不是在堆中简单的"前进".

我读过以下问题: 什么是内存碎片?

但是没有一个答案提到有关性能的任何内容,只有失败分配大内存块.

那么内存碎片会new花费更多时间来分配内存吗?如果是的话,多少钱?我如何知道是否new有"困难时间"在堆上查找内存?

我试图找到GCC用于在内存中找到"漏洞"以分配内部的数据结构/算法.但找不到任何血统的解释.

c++ memory memory-fragmentation

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

在使用GDB调试核心转储时知道谁是继承者

我的进程崩溃了,我有一个核心转储.我看到在运行类似的代码时进程崩溃了:

class father
{
public:
  void virtual runVirtualFunc() = 0;
  void func()
  {
    runVirtualFunc();
    // ... crash here ...  THIS IS THE PLACE I NEED TO KNOW WHO IS THE INHERITOR (so I could analyze which "runVirtualFunc" ran).
  }
  virtual ~father() {}
};

class son1 : public father
{
public:
  void virtual runVirtualFunc() { /* do something 1*/} 
};

class son2 : public father
{
public:
  void virtual runVirtualFunc() { /* do something 2*/} 
};
Run Code Online (Sandbox Code Playgroud)

我在核心转储中有一个完整的调用堆栈,但我不知道谁是运行"func"的继承者.有没有办法解决它(可能通过一些指针计算技巧this?)

我没有实时附加进程,只有核心转储.

c++ linux gdb

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

如何列出实现抽象类和接口(C#)的东西?

假设我有Tanks,Airplanes和许多其他东西的列表,它们实现的常见的东西是IHaveLocation,它是抽象类,IHaveColor是一个接口.

我想列出它们,因为我需要在这两个接口的基础上查询列表.

我该怎么做 ?

  • 我可以创建一个对象列表,然后编写(obj作为IHaveLocation)并使用他的方法,并使用(obj作为IHaveColor)并使用他的方法.但这非常难看!
  • 我可以列出IhaveLocation,然后我只需要做一个(obj作为IHaveColor).但它也很可怕
  • 我可以创建一个新的抽象类,然后从两者继承,但我试图避免它.

这有什么诀窍吗?

我想做点什么 List<IHaveLocation and IHaveColor>

c# generics

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

如何从构造函数传递给作为成员函数的谓词

我有以下代码:

template <class T>
class GenericGeneticSolver
{
public:
    GenericGeneticSolver(IGenticSolverHelper<T>& helper, int generationSize) : mSolverHelper(helper), mGenerationSize(generationSize)
    {
        mCurrentGeneration.resize(mGenerationSize);
        for(int i=0;i<mGenerationSize;i++)
        {
            mSolverHelper.GenerateRandomSolution(mCurrentGeneration[i]);
        }

        sort(mCurrentGeneration.begin(),mCurrentGeneration.end(), solutionComparer);
    }
    void Evolve(int numberOfGenerations = 1)
    {
        //sort(mCurrentGeneration.begin(),mCurrentGeneration.end(), solutionComparer);
    }
private :
    int mGenerationSize;
    vector<T> mCurrentGeneration;
    IGenticSolverHelper<T>& mSolverHelper;

    bool solutionComparer (T first,T second) { return (mSolverHelper.Cost(first)<mSolverHelper.Cost(second)); }
};
Run Code Online (Sandbox Code Playgroud)

在constructor我用成员填充向量,然后我试图通过将谓词传递给Sort函数来对该向量进行排序,谓词是一个名为`solutionComparer的成员函数.

不幸的是它没有编译,编译器不满意在构造函数中使用指向成员函数的指针,我在"Evolve"函数中尝试了相同的行,并且它确实编译.

我得到的错误是:

error C3867: 'GenericGeneticSolver<T>::solutionComparer': function call missing argument list; use '&GenericGeneticSolver<T>::solutionComparer' to create a pointer to member
Run Code Online (Sandbox Code Playgroud)

我试图做错误建议但它也没有编译(sort函数中的一些随机错误).

为什么我不能在构造函数中使用指向成员函数的指针?

c++ sorting constructor pointers

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