小编cls*_*udt的帖子

何时返回C++中的指针,标量和引用?

我正在从Java转向C++,并且对语言的灵活性感到有些困惑.有一点是存储对象的方法有三种:指针,引用和标量(如果我理解正确,则存储对象本身).

我倾向于尽可能使用引用,因为它尽可能接近Java.在某些情况下,例如派生属性的getter,这是不可能的:

MyType &MyClass::getSomeAttribute() {
    MyType t;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为t只存在于范围内,getSomeAttribute()并且如果我返回对它的引用,它将在客户端可以使用之前指出它.

因此,我有两个选择:

  1. 返回一个指针
  2. 返回一个标量

返回指针看起来像这样:

MyType *MyClass::getSomeAttribute() {
    MyType *t = new MyType;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这样做,但客户端必须检查此指针NULL才能确定,这是引用不必要的.另一个问题是调用者必须确保t解除分配,如果我可以避免它,我宁愿不处理它.

另一种方法是返回对象本身(标量):

MyType MyClass::getSomeAttribute() {
    MyType t;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这非常简单,正是我在这种情况下想要的东西:感觉就像一个引用,它不能为空.如果对象超出客户端代码的范围,则会将其删除.非常方便.但是,我很少看到有人这样做,这有什么原因吗?如果我返回标量而不是指针或引用,是否存在某种性能问题?

处理这个问题最常见/最优雅的方法是什么?

c++ scalar pointers reference

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

如何增加networkx.spring_layout的节点间距

绘制一个集团图

import networkx as nx
....
nx.draw(G, layout=nx.spring_layout(G))
Run Code Online (Sandbox Code Playgroud)

产生如下图:

在此输入图像描述

显然,需要增加节点之间的间隔(例如,边缘长度).我用谷歌搜索了这个,并在这里找到了这个建议:

对于某些布局算法,存在可能有帮助的"缩放"参数.例如

1中:将networkx导入为nx

2:G = nx.path_graph(4)

在[3]中:pos = nx.spring_layout(G)#default to scale = 1

在[4]中:nx.draw(G,pos)

在[5]中:pos = nx.spring_layout(G,scale = 2)#所有节点之间的双倍距离

在[6]中:nx.draw(G,pos)

但是,该scale参数似乎没有任何影响.

获得更好绘图的正确方法是什么?

python graph graph-drawing networkx

28
推荐指数
3
解决办法
2万
查看次数

如何在Mac OS X上安装Python开发头文件?

对于使用Boost.Python的项目(请参阅此另一个问题),我需要包含例如的Python开发头文件pyconfig.h.

这些显然是从我的系统中丢失的.我通过Homebrew安装了Python 3:

cls ~ $ brew info python3
python3: stable 3.3.0
http://www.python.org/
Depends on: pkg-config, readline, sqlite, gdbm
/usr/local/Cellar/python3/3.2.3 (4420 files, 78M)
/usr/local/Cellar/python3/3.3.0 (4843 files, 93M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/python3.rb
Run Code Online (Sandbox Code Playgroud)

我更喜欢通过Homebrew获取标题,但我找不到它们的包.

cls ~ $ brew search python-dev
No formula found for "python-dev". Searching open pull requests...
Run Code Online (Sandbox Code Playgroud)

我有哪些选择来安装这些标头?有自制软件包吗?

python macos homebrew header

28
推荐指数
2
解决办法
4万
查看次数

GCC中地址消毒剂的有意义的堆栈跟踪

我只是尝试用GCC和-fsanitize=address旗帜进行编译.当我运行我的程序时,地址清理程序发现了一个缺陷,但堆栈跟踪没有帮助.如何配置它以使其指向我需要查看的源代码位置?

=================================================================
==32415== ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6006004b38a0 at pc 0x10b136d5c bp 0x7fff54b8e5d0 sp 0x7fff54b8e5c8
WRITE of size 8 at 0x6006004b38a0 thread T0
    #0 0x10b136d5b (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c6d5b)
    #1 0x10b136e0c (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c6e0c)
    #2 0x10b138ef5 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c8ef5)
    #3 0x10b137a2e (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000c7a2e)
    #4 0x10b13acf2 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1000cacf2)
    #5 0x10b253647 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001e3647)
    #6 0x10b24ee55 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001dee55)
    #7 0x10b237108 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001c7108)
    #8 0x10b237c17 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001c7c17)
    #9 0x10b2385c9 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001c85c9)
    #10 0x10b23f659 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001cf659)
    #11 0x10b254951 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001e4951)
    #12 0x10b24fbeb (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001dfbeb)
    #13 0x10b23dc38 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001cdc38)
    #14 0x10b229d28 (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001b9d28)
    #15 0x10b229bda (/Users/cls/workspace/NetworKit/./NetworKit-Tests-D+0x1001b9bda)
    #16 0x7fff8b7785fc (/usr/lib/system/libdyld.dylib+0x35fc)
    #17 0x2
0x6006004b38a0 …
Run Code Online (Sandbox Code Playgroud)

c++ memory gcc stack-trace address-sanitizer

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

如何使Ipython输出一个列表后没有换行符?

IPython控制台打印带有换行符的元素列表,以便每个元素都显示在自己的行中.这通常是一个功能,但在我的情况下它是一个错误:我需要复制和粘贴长列表,所以我需要一个紧凑的表示.我怎样才能做到这一点?

python list ipython ipython-notebook

23
推荐指数
2
解决办法
2万
查看次数

从IPython重新加载Python扩展模块

使用Cython,我正在开发一个扩展模块,它将构建为.so文件.然后我使用IPython测试它.在开发过程中,我经常需要进行更改和重建.我还需要退出IPython shell并重新输入所有命令.重新导入模块

import imp
imp.reload(Extension)
Run Code Online (Sandbox Code Playgroud)

不起作用,代码不更新.有没有办法让我在重建模块后避免重启IPython shell?

python ipython cython python-3.x

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

编写std :: vector vs plain数组的线程安全性

我已经在Stackoverflow上读到,没有一个STL容器对于写入是线程安全的.但这在实践中意味着什么?这是否意味着我应该将可写数据存储在普通数组中?

我希望并发调用std::vector::push_back(element)可能会导致数据结构不一致,因为它可能需要调整向量的大小.但是这样的情况呢,不涉及调整大小:

1)使用数组:

int data[n];
// initialize values here...

#pragma omp parallel for
for (int i = 0; i < n; ++i) {
    data[i] += func(i);
}
Run Code Online (Sandbox Code Playgroud)

2)使用`std :: vector``:

std::vector<int> data;
data.resize(n);
// initialize values here...

#pragma omp parallel for
for (int i = 0; i < n; ++i) {
    data[i] += func(i);
}
Run Code Online (Sandbox Code Playgroud)

第一个实现是否真的比第二个更好a)在线程安全方面和b)在性能方面?我更喜欢使用std :: vector,因为我对C风格的数组不太熟悉.

编辑:我删除了#pragma omp atomic update保护写.

c++ stl openmp thread-safety

19
推荐指数
2
解决办法
9067
查看次数


调整seaborn.boxplot

我想比较一组得分(score)的分布,按一些类别(centrality)分组并用其他一些()着色model.我用seaborn试过以下内容:

plt.figure(figsize=(14,6))
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1))
seaborn.despine(offset=10, trim=True)
plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight")
Run Code Online (Sandbox Code Playgroud)

我对这个情节有一些问题:

  • 有大量的异常值,我不喜欢它们是如何绘制的.我可以删除它们吗?我可以改变外观以减少混乱吗?我可以给它们着色至少使它们的颜色与盒子颜色相匹配吗?
  • modeloriginal是特殊的,因为所有其他分布应该与分布进行比较original.这应该在视图中直观地反映出来.我可以制作original每组的第一个盒子吗?我可以以某种方式偏移或标记它吗?是否有可能在每个original分布的中位数和一组方框中绘制一条水平线?
  • 有些值score非常小,如何正确缩放y轴来显示它们?

在此输入图像描述

编辑:

这是一个带有对数刻度的y轴的示例 - 也不是理想的.为什么有些盒子似乎在低端切断?

在此输入图像描述

python plot matplotlib boxplot seaborn

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

改进 PySpark DataFrame.show 输出以适合 Jupyter notebook

在 Jupyter notebook 中使用 PySpark,DataFrame.show与 Pandas DataFrames 的显示方式相比,Spark 的输出技术含量较低。我想“嗯,它可以完成工作”,直到我得到这个:

在此处输入图片说明

输出未调整为笔记本的宽度,因此线条以丑陋的方式环绕。有没有办法自定义这个?更好的是,有没有办法获得 Pandas 风格的输出(pandas.DataFrame不明显转换为)?

python pandas apache-spark pyspark jupyter

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