小编Umu*_*bak的帖子

有效的C++项目23首选非成员非友元函数到成员函数

虽然对类设计中的一些事实感到困惑,特别是函数是否应该是成员,但我查看了有效的c ++并找到了第23项,即将非成员非友元函数更喜欢成员函数.第一手阅读Web浏览器示例有一定意义,但是该示例中的便捷函数(在本书中命名为非成员函数)会改变类的状态,不是吗?

  • 所以,第一个问题,他们不应该成为会员吗?

  • 进一步阅读,他认为STL函数,实际上某些类没有实现的函数是在stl中实现的.继他们演变成被包装到一些合理的命名空间,如一些便利功能,这本书的想法std::sort,std::copyalgorithm.例如,vector类没有sort函数,并且使用stl sort函数,因此它不是向量类的成员.但是也可以将相同的推理延伸到向量类中的某些其他函数,例如,assign这样也不能作为成员实现,而是作为便利函数实现.但是,这也会改变对象的内部状态,例如它操作的排序.那么这个微妙但重要(我猜)问题背后的理由是什么呢?

如果你有权访问这本书,你可以为我澄清这些要点吗?

c++ encapsulation member-functions effective-c++ non-member-functions

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

从python中的共享fortran库调用函数

我想从Python中的Fortran共享库中调用一些函数.我在网上找到了一些链接并阅读它们,根据我的发现,我应该这样做

libadd = cdll.LoadLibrary('./libbin.so') 
Run Code Online (Sandbox Code Playgroud)

加载共享对象.但是,此共享对象包含来自另一个共享库的一些符号.我阅读了cdll的帮助,但似乎无法同时加载多个共享对象文件.我怎样才能调用这个Fortran库中的函数,这个库很可能是由英特尔Fortran编译器编译的?

python fortran fortran-iso-c-binding

15
推荐指数
2
解决办法
5812
查看次数

Valgrind没有输出

对于我正在尝试为我正在处理的类之一编写代码的方法,我试图从文件中读取double值并使用这些数值动态设置程序内的一些数组.

我想检查一下,至少到了我来的地步,我是否有内存泄漏.然而,由于cpu加载很高,启动valgrind只是挂起,valgrind似乎工作得相当多,但即使我已经等待一段时间也没有产生输出.我已经翻阅了手册的页面,但找不到有用的东西.我编译了valgrind-3.8.0并立即使用它.而且我按照我一直以来的方式解雇它

valgrind --leak-check=yes --log-file=valgrind_log ./binary_to_execute args_if_any
Run Code Online (Sandbox Code Playgroud)

我无法在谷歌搜索中找到这个悬而未决的问题.关于这种悬挂行为的原因有什么想法吗?

编辑1:这是应用程序的time命令的定时输出

47740

real    0m1.299s
user    0m1.116s
sys     0m0.176s
Run Code Online (Sandbox Code Playgroud)

编辑2:这是一个与我遇到的问题大致相同的链接,

有类似问题的消息

编辑3:我注意到有趣,如果我试图读取的文件大小很大,则会出现此问题,如果文件的大小相对较小,则不会发生此挂起,这对我来说也很奇怪.

c++ valgrind memory-management

8
推荐指数
2
解决办法
6581
查看次数

Vim视觉选择在Emacs中删除/插入

我试图找到vim视觉模式的替代品,这非常有用,比方说我想删除下面两行中的前两个字符

11 line1
22 line2
Run Code Online (Sandbox Code Playgroud)

在vim中,我进入可视模式并选择我要删除的区域,然后将其删除.而且我之后也可以添加到列中

11
22
Run Code Online (Sandbox Code Playgroud)

喜欢

11 added line1
22 added line2
Run Code Online (Sandbox Code Playgroud)

在可视模式下选择列后,按Shift + I.有没有办法在emacs中做同样的事情?

emacs

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

继承和命名空间

我正在尝试我的第一个有用的面向对象程序,其中包含一些命名空间 我有一个基类B,它位于名称空间NS中.如果我尝试从这个基类继承以获得继承工作,我应该在类decleration中使用NS :: B,如下所示,这是真的吗?或者是否有更广泛接受的继承语法?

namespace NS
{
    class D: public NS::B{
    ...
    };
}
Run Code Online (Sandbox Code Playgroud)

最好的,Umut

c++ namespaces

6
推荐指数
2
解决办法
9981
查看次数

为第二个范围内的重复设置差异,替代 remove_copy

我有两个数组或向量,比如:

  int first[] = {0,0,1,1,2,2,3,3,3};
  int second[] = {1,3};
Run Code Online (Sandbox Code Playgroud)

我想摆脱第一组中的 1s 和 3s,set_difference只能摆脱这些值的第一次出现,但这不是我想要的。

我是否应该通过在第二个范围上迭代并每次从第一组中删除一个条目来使用remove_copy执行此操作。

在 C++ 中执行此操作的最佳方法是什么?

c++ stl

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

在Fortran中传递一个不连续的数组部分

我使用intel fortran编译器和intel mkl进行性能检查.我正在通过类似的调用将一些数组部分传递给Fortran 77接口

call dgemm( transa,transb,sz_s,P,P,&
            a, Ts_tilde,&
            sz_s,R_alpha,P,b,tr(:sz_s,:),sz_s)
Run Code Online (Sandbox Code Playgroud)

很明显,tr(:sz_s,:)在内存中是不连续的,并且Fortran 77接口期望连续阻塞并为此创建一个临时块.

我想知道的是,如果我在tr的代码中显式创建临时数组并在操作之前和之后来回复制来自该临时数据的信息会有所不同,或者与创建临时的编译器本身相同从表现的角度来看?我想编译器总是会更有效率.

当然,我们欢迎任何有关消除这些临时工作的建议.

还有一点,如果我显然使用库的Fortran 95接口,对更简单的测试问题进行类似的调用,则不会发出创建临时的警告.然后我在mkl的手册中读到Fortran 95接口使用假定的形状数组,这解释了为什么不创建临时数据.

但是在那时,我似乎无法使用一些支持函数,如计时例程.也就是说,intel mkl有一些定时支持函数,但是如果我将它们与mkl_service例程一起使用,那么我得到'这个名字没有类型,并且dsecnd必须有一个显式类型'错误.对这个问题的任何想法也是受欢迎的.一个简单的例子给出了

program dgemm95_test
! some modules for Fortran 95 interface
use mkl_service
use mkl95_precision
use mkl95_blas
!
implicit none
!
double precision, dimension(4,3) :: a
double precision, dimension(6,4) :: b
double precision, dimension(5,5) :: r ! result array
double precision, dimension(3,2) :: dummy_b
!
character(len=1) :: transa
character(len=1) :: transb
!
double precision :: alpha, beta, t1, t2, t
integer :: sz1, …
Run Code Online (Sandbox Code Playgroud)

fortran intel intel-mkl

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

git目录结构混乱

来自svn背景,虽然不是那个高级用户,但我对git的目录结构感到困惑.

对于C++项目,我阅读了在线专业书的前三章.我想这是一本非常好的书,有很多数字可以简化解释.

现在的问题是svn正在创建一个trunk目录,我的头和源代码位于其下(更准确地说,我是使用svn命令创建它们),include和src目录.在前三章中,我没有看到这样的结构.问题是在这样的目录下构建你的工作的最佳策略是什么,应该创建不同的目录并将这些目录下的文件分别添加到跟踪控制中,还是有更结构化的方式来完成这个?

我想我不必把所有东西放在一个地方,这是不太可能的......

git

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

另一个带功能的开关盒

深入研究有趣的python语言,因此语言中没有作为构造的转换.所以使用词典是阅读学习python第一版的第一选择.所以我试过......

cases = { 2 : readt3(e,t,off, partElems, partsNodes),  # to read the triangular elements 
          3 : readq4(e,t,off, partElems, partsNodes),  # to read the quadrangular elements
          5 : readh8(e,t,off, partElems, partsNodes),  # to read the hexa elements
        }      
# define functions 
def readt3( e, t, off, partElems, partsNodes, partPnt ):
    partsElems[partPnt].append(e)
    nods = t[offset: offset+3];
    for n in nods:
      partsNodes[partPnt].append(n)
    return 
Run Code Online (Sandbox Code Playgroud)

并得到错误"readt3未定义",我认为我得到了这个,因为它没有在案例之前定义然后将函数定义移到上面的情况但仍然是相同的问题,但这次"e未定义"我无法理解这一点,所以e是一个函数参数,为什么我在e上得到一个与定义相关的错误?

在这种情况下,在模拟switch-case时应该在哪里放置函数定义?

python function case switch-statement

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

从向量初始化数组

可以从包含与向量相同类型的元素的数组初始化向量,例如

double a[] ={ somevalues };
std::vector<double> vec(a, a+dimension)
Run Code Online (Sandbox Code Playgroud)

我想知道如果没有明确的循环,是否可能相反?是否可以从像上面那样的快捷方式的矢量初始化数组,我想不是,但让我问...

c++

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