小编kMa*_*ter的帖子

将名称空间声明为类的朋友

我想知道是否有一种方法可以使我们friend使用类在特定命名空间中定义所有函数?

特别是,我有一个班级,例如:

class C {
    private:
        // ...
    public:
        // ...

        friend C* B::f1(C*);
        friend C* B::f2(C*);
        friend C* B::f3(C*);
        friend C* B::f4(C*);
        friend C* B::f5(C*);
};
Run Code Online (Sandbox Code Playgroud)

和命名空间B:

namespace B {
    C* f1(C* x);
    C* f2(C* x);
    C* f3(C* x);
    C* f4(C* x);
    C* f5(C* x);
};
Run Code Online (Sandbox Code Playgroud)

现在,我宁愿避免在类定义中编写5行来使命名空间的所有五个函数B与类一起使用,C并告诉编译器命名空间B中定义的所有函数都是类的朋友C(即可以访问它的私有)成员).

我想快速修复是将命名空间更改为类并将函数定义为静态成员,然后将类声明为类B的朋友C.但是,出于好奇,我想知道命名空间是否也可以这样做?

提前致谢.

c++ namespaces friend-function friend-class

17
推荐指数
2
解决办法
8090
查看次数

在vim中将一对括号更改为括号的最快方法

我是vim的新手,在发现大量有趣的东西的过程中,人们可以使用这个强大的编辑器.

我需要经常做的一件事是将文本中的一对括号更改为方括号(例如更改( (a+b+c) )[ (a+b+c) ])或反之亦然.我现在通过手动改变两个字符做到这一点(,并)[].

但是,当括号之间有大量文本时,可能很难找到一对开括号和右括号,特别是因为在将第一个更改([之后,%命令将不再能够找到相应的).

我想知道是否有更好更快的方法进行此类更改?

vim matching parentheses

16
推荐指数
4
解决办法
7855
查看次数

这是创建 numpy 数组的只读视图的正确方法吗?

我想创建对 NumPy 数组的只读引用。这是对(任何 NumPy 数组)进行b只读引用的正确方法吗?aa

def get_readonly_view(a):
    b = a.view()
    b.flags.writeable = False
    return b
Run Code Online (Sandbox Code Playgroud)

具体来说,我想确保上述内容不会“复制” a?的内容。(我尝试用它进行测试np.shares_memory,它确实返回True。但我不确定这是否是正确的测试。)

另外我想知道是否get_readonly_view已经在 NumPy 中实现了?


更新。 建议将数组转换为类属性以使其只读。我认为这不起作用:

import numpy as np

class Foo:

    def __init__(self):
        self._a = np.arange(15).reshape((3, 5))


    @property
    def a(self):
        return self._a


    def bar(self):
        print(self._a)
Run Code Online (Sandbox Code Playgroud)

但客户端可以更改以下内容_a

>> baz = Foo()
>> baz.bar()
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
>> …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

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

哪种数据结构支持有效删除和随机访问?

我正在寻找一种数据结构,我可以在其中有效地删除项目,并支持随机访问.

我还需要有效的插入,但由于元素的排序并不重要,我认为我可以预先分配内存以获得它可能必须存储的最大数量的元素,然后始终将新元素放在最后,以便不重新分配或移动其他元素有必要的.

据我所知,链表很适合删除,但访问其元素可能需要O(n)时间.另一方面,简单数组(例如,vector在C++中)具有随机访问属性,但是从这种结构中删除元素具有O(n)的复杂性.

实际上,随机访问要求比我真正需要的要强.我只需要能够随机均匀地选择结构的元素.显而易见的高效访问属性意味着我需要的操作效率,但我不确定这两者是否相同.

提前致谢!

c++ arrays list random-access data-structures

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

如何减少gnuplot的EPS格式输出?

我有大量的数据,我想从中创建散点图并将其包含在我的LaTeX文档中.我使用gnuplot生成带有epslatex输出格式的散点图,以便能够轻松地将数据导入我的LaTeX文档.

我的问题是EPS文件太大(每个图大约14MB),这将导致非常大的输出文档.显然,原因是所有数据都包含在不需要的EPS文件中.

但是,我找不到压缩EPS文件的方法.唯一的方法是减少我拥有的样本点数,但出于技术原因,我宁愿不这样做.

有谁能建议我减少EPS情节的大小?

我试图使用ImageMagick并降低EPS文件的分辨率(如convert -units PixelsPerInch plot.eps -density 300 plot2.eps),但它缩小了我想要的尺寸.

提前致谢,

latex gnuplot eps

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

在bash脚本中在文件扩展名之前附加字符串

我需要在bash脚本中扩展文件之前添加一个数字.例如,我想将文件名名称" abc.efg" 转换为" abc.001.efg.问题是我不知道文件的扩展名是什么(它是脚本的参数之一).

我一直在寻找最快捷的方式.

提前致谢,

bash

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

是否可以让vim标记记住当前窗口中该行的相对位置?

我正在使用http://www.thegeekstuff.com/2008/12/vi-and-vim-autocommand-3-steps-to-add-custom-header-to- 中提出的解决方案的(修改版本)your-file/自动为我的源代码创建和更新标题。

如上述页面所述,在调用 中的write命令时vim,将执行以下命令序列:

  1. 在文件的当前位置设置了一个标记。
  2. “上次修改”字段已更新。这会将光标移动到文件的开头(搜索和替换发生的地方)。
  3. 光标返回到先前标记的位置。

这很好,但有一个有点烦人的问题:假设我们正在编辑靠近窗口底部的一行。如果此时我们保存文件,由于光标移动(用于更新标题),我们正在编辑的行会​​跳转,因此它位于窗口的中间。

据我了解,'a将光标移动到标记标记的位置a并调整窗口内容,使当前行出现在窗口中间。我想知道是否有办法让“标记”也记住窗口中标记线的确切相对位置,并在跳回标记时保持这个位置?

vim

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

在 NumPy 数组上调用“np.asarray”是否会产生很大的开销?

我对 Python 世界还很陌生,所以请原谅我的愚蠢问题。

在许多情况下,我实现了一个适用于类似数组的数字输入的函数,并且使用 NumPy 实用程序对序列进行基本操作通常是有利的。为此,我会写这样的东西:

import numpy as np

def f(x):
    if not isinstance(x, np.ndarray):
        x = np.asarray(x)
    # and from now on we know that x is a NumPy array, with all standard methods
Run Code Online (Sandbox Code Playgroud)

(请注意,我不想依赖调用者始终传递 NumPy 数组。)

if我想知道如果通过删除?来简化代码会产生什么额外开销?即,有类似的东西

def f(x):
    x = np.asarray(x)
    # and from now on we know that x is a NumPy array, with all standard methods
Run Code Online (Sandbox Code Playgroud)

基本上,两种情况之间的区别在于第二个代码更紧凑,但np.asarray即使x已经是 NumPy 数组也会不必要地调用。

python arrays numpy

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

在Python中复制基类'__init__'签名的正确方法是什么?

如果子类没有定义自己的__init__方法,则自动继承基类的构造函数(因此其签名)。但是应该如何定义一个__init__继承基类签名(自动)的子类方法呢?

例如:

class Base:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

class Child1(Base):
    def foo(self):
        return self.arg1 + self.arg2


class Child2(Base):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        if self.arg1 == 0:
            raise ValueError("arg1 cannot be zero")

    def foo(self):
        return self.arg2 / self.arg1
Run Code Online (Sandbox Code Playgroud)

Child1没有自己的构造函数,因此Bases __init__被继承,并且help(Child1)会给出:

Help on class Child1 in module test:

class Child1(Base)
 |  Child1(arg1, arg2)
 |  
 ...
Run Code Online (Sandbox Code Playgroud)

Child2需要有一个习惯__init__。然而,由于它只是将所有参数传递给Base,因此它的参数被定义(*args, **kwargs)为将所有参数短路到 …

python inheritance python-3.x

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

迭代所有整数向量,总结到MATLAB中的某个值?

我想找到一个干净的方法,以便我可以迭代所有长度正整数的向量,比如说n(调用x),这样sum(x) == 100在MATLAB中.

我知道这是一项指数级复杂的任务.如果长度足够小,比如说2-3我可以通过一个for循环来做(我知道这是非常低效的)但是更长的向量怎么样?

提前致谢,

matlab vector

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