现在,我知道这是一个常见的问题,但我还没有真正找到答案.这真的是一个关于标准的问题.我正在研究一个涉及遗传算法的项目.但是,当涉及到返回矢量时,我遇到了瓶颈.有没有"适当的"方法来做到这一点.通常我使用动态分配的数组,并返回一个指向新创建的数组的指针.
obj* func(obj* foo);
Run Code Online (Sandbox Code Playgroud)
这样,一切都很有效,没有数据复制.有没有相当于用矢量这样做?这个向量中有对象,所以按值返回它会很慢.是通过引用传递"结果"向量的唯一解决方案吗?
void func(vector<obj> &input, vector<obj> &result);
Run Code Online (Sandbox Code Playgroud)
并且,在备注以供将来参考时,在动态分配的数组上使用向量或其他STL容器是标准做法吗?动态分配的数组是否仅用作设计容器的低级工具?它们只是过去的遗物吗?
我试图了解如果一个类创建另一个类,如何回馈内存.
我有
Clas A;
Run Code Online (Sandbox Code Playgroud)
然后另一个为A类分配内存的类:
class B{
private:
A* data;
public:
// Allocating new memory
B (){
A* data = new A();
//giving memory back
~B(){
delete data; };
};
Run Code Online (Sandbox Code Playgroud)
当我在main函数中执行代码时,它就崩溃了.怎么了?我在这里有点迷失.谢谢.
我从jls找到了引用:
等于运算符可用于将两个可转换的操作数(第5.1.8节)与数字类型,或两个类型为boolean或Boolean的操作数,或两个操作数(分别为引用类型或null类型)进行比较.所有其他情况都会导致编译时错误.
但是这段代码
String str= "";
Number num = 1;
System.out.println(str == num);
Run Code Online (Sandbox Code Playgroud)
每个操作数都是参考!
说它是不兼容的类型.
jls在哪里说这些类型应该兼容?
我必须创建一个允许以下内容的类/构造函数:
Object a = new Object("test");
Object b = new Object("test");
a == b // should be true
Run Code Online (Sandbox Code Playgroud)
所以对象a和b不仅应该根据它们的值相同,而且应该使用相同的引用并引用相同的内存.
构造函数应该查明具有给定值的实例是否已经存在,如果是,则只需获取引用并将其指向现有对象.
有没有办法获得特定类的所有创建实例?有人可以给我一个简短的提示从哪里开始?我不知道...
我们有以下两个静态定义的字节数组......
unsigned char pixelBuffer1[32][6] = {/**/};
unsigned char pixelBuffer2[32][6] = {/**/};
Run Code Online (Sandbox Code Playgroud)
我们想将当前缓冲区存储在变量中,但我们不确定如何声明它.这就是我们想要做的......
[SOMETYPE] activePixelBuffer;
activeBufferId == getOneOrTwoBasedOnSomeLogic();
activePixelBuffer = (activeBufferId == 1)
? pixelBuffer1
: pixelBuffer2;
activePixelBuffer[17][4] = x;
activeBufferId == getOneOrTwoBasedOnSomeLogic();
activePixelBuffer = (activeBufferId == 1)
? pixelBuffer1
: pixelBuffer2;
activePixelBuffer[23][2] = y;
Run Code Online (Sandbox Code Playgroud)
(注意我们在整个代码中重新分配activePixelBuffer的值)但是,我们不确定要输入什么 [SOMETYPE]
我知道如果我们将pixelBuffer1或pixelBuffer2传递给一个函数,我们会像这样定义它...
void someFunc(unsigned char (&myArray)[32][6])
{
...
}
Run Code Online (Sandbox Code Playgroud)
...但这似乎不能作为局部变量声明类型.此外,这迫使我们硬编码维度大小,这是好的,但不必这样做是很好的.
我们也尝试过使用指针,但阵列的二维方面也让我们失望.
那么我们用什么类型?
如果我有一个名为example.py的Python文件,with open('%s/data.csv' % sys.path[0]) as var_name:并且data.csv与example.py位于同一目录中,那么如果我从终端运行example.py它会正常工作,但是当使用unittest时它不起作用.我的理解是,当从终端运行它时,sys.path [0]为我提供了正在运行的文件的路径(example.py),因此如果data.csv和example.py在同一目录中,那么sys. path [0] /data.csv将正确找到data.csv.但是当unittest运行时,无论什么幕后原因,sys.path [0]都是空的,并且正确找不到/data.csv.
所以我想知道什么是一个好的策略(也许是一些显式的代码:))是为了使这个引用总是工作无论如何(我猜没有sys.path [0]但是如果有一些东西可以使用我将会接受).
我还应该提到我在OS X 10.9.3上使用python 2.7
我有一个类,我希望在稍后的程序初始化时实例化.在那之前我绝对不希望那个类的任何实例.我希望这个实例在全球范围内可用.
最简单的方法是拥有一个全局变量,它是对该类的引用,这很容易 - 只需在实例化类之后立即分配引用.除非我需要在那之前用某些东西填充该引用,否则我将被声明为引用但未初始化,并且我宁愿不创建所述类的虚拟实例.
什么是让它运作的正确方法?
configClass& global_config; // = ?
init()
{
//... other prerequisites for loading the config
static configClass _cfg(CONFIG_FILE,other_params);
global_config = _cfg;
//more code, using global_config
}
Run Code Online (Sandbox Code Playgroud) 这之间是否有任何有价值的性能差异:
int myFunction(const int &a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)
还有这个:
int myFunction(int a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)
?
据我所知,第二种方法将变量的副本作为参数传递给新寄存器,这在asm代码中需要更多的指令.在这种情况下,这个函数被称为千次,性能至关重要,传递const引用而不是变量更好吗?
例如,我有以下课程.
class A {
public $foo = 1;
}
$a = new A;
$b = $a; // a copy of the same identifier (NB)
Run Code Online (Sandbox Code Playgroud)
根据当前的PHP文档,制作了一个标识符的副本,这种情况一直如此吗?如果不是,它什么时候改变了?
我正在编写一个脚本来实现游戏2048来练习perl,并且会出现错误,如下所示:
在2048.pl第181行第11行使用引用"HASH(0x13bd718)"作为数组索引.
涉及的代码是这样的子程序:
sub gen1{
my @free_locs = {};
my $length;
my $rand_loc;
my $insert_loc;
for ($i=0; $i<16; $i++){
if($all_lines[$i] == 0){push @free_locs, $i;}
}
$length = @free_locs;
$rand_loc = int rand $length;
if ($rand_loc == $length) {$rand_loc--;}
$insert_loc = $free_locs[$rand_loc];
$all_lines[$insert_loc] = &generate();
&row_update;
&col_update;
}
Run Code Online (Sandbox Code Playgroud)
起初我写的就像那样
$all_lines[$free_locs[$rand_loc]] = &generate();
Run Code Online (Sandbox Code Playgroud)
错误似乎更频繁地出现.然后我切换到上面显示的子程序中的代码,这似乎减少了它发生的机会,但它仍然发生......
我的编码方式有什么问题吗?编写这样一段代码最干净的方法是什么?
感谢致敬,
特里