小编pep*_*ero的帖子

如何只获取Python中路径的最后一部分?

在Python中,假设我有这样的路径:

/folderA/folderB/folderC/folderD/
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个folderD部分?

python path path-manipulation

203
推荐指数
7
解决办法
12万
查看次数

使用stringstream的不同插入位置

我很难从以下代码中理解stringstream的不同行为.有人能否了解内部流如何工作?

int main(){
    string str = "123";  
    stringstream ss(str);
    cout << ss.str() <<endl;  
    ss << str;
    cout << ss.str() <<endl;
} 
Run Code Online (Sandbox Code Playgroud)

输出:

123

123

int main(){
    string str = "123";  
    stringstream ss;
    ss << str;
    cout << ss.str() <<endl;  
    ss << str;
    cout << ss.str() <<endl;
} 
Run Code Online (Sandbox Code Playgroud)

输出:

123

123123

c++ stl stringstream

13
推荐指数
1
解决办法
1264
查看次数

C++ stl容器元素的"CopyConstructible"要求

关于C++ stl容器元素的要求,标准说:元素类型应该是CopyConstructible,并且有一个CopyConstructible要求的表.此外,通过各种书籍(Josuttis等),生成的副本应该"等同于"源.

我想我需要一些清晰度.什么是"等同于"?另外,我对"CopyConstructible"和"深/浅拷贝"之间的关系有点困惑.通常,复制构造函数是浅拷贝或深拷贝.那么哪一个适用于"CopyConstructible",哪个不适用?

谢谢你的评论!

c++ containers stl deep-copy copy-constructor

9
推荐指数
2
解决办法
2128
查看次数

在c ++中打印变量名的通用方法

给一堂课

struct {
  int a1;
  bool a2;
  ...
  char* a500;
  ...
  char a10000;      
}
Run Code Online (Sandbox Code Playgroud)

我想打印或流出

"a1 value is SOME_VALUE"  
"a2 value is SOME_VALUE"
"a500 value is SOME_VALUE"
...
"a10000 value is SOME_VALUE"
Run Code Online (Sandbox Code Playgroud)

成员变量的类型不一样(主要是int,bool,char*等,也就是说,不需要重载<<运算符),成员变量名可以用任何东西命名,即没有遵循的规则.而不是逐个明确地输入(非常繁琐且容易出错的工作),有没有通用的方法?

谢谢你的评论!

c++ variables printf iostream

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

成员初始化列表中的unique_ptr

编辑:我理解unique_ptr是不可复制的,只能移动.我不明白初始化列表会发生什么.

为什么成员初始化列表中的unique_ptr可以像代码片段一样工作?

#include <memory>

class MyObject
{
public:
    MyObject() : ptr(new int) // this works.
    MyObject() : ptr(std::unique_ptr<int>(new int)) 
    // i found this in many examples. but why this also work? 
    // i think this is using copy constructor as the bottom.        
    {
    }

    MyObject(MyObject&& other) : ptr(std::move(other.ptr))
    {
    }

    MyObject& operator=(MyObject&& other)
    {
        ptr = std::move(other.ptr);
        return *this;
    }

private:
    std::unique_ptr<int> ptr;
};

int main() {
    MyObject o;
    std::unique_ptr<int> ptr (new int);
    // compile error, of course, since …
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization unique-ptr c++11

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

如何配置ddd以使用另一个gdb而不是默认的gdb

我是ddd和gdb的新手.

我有另一个交叉编译器,例如arm_gdb,如何设置ddd来使用这个arm_gdb而不是默认的gdb?

提前致谢.

linux debugging gdb

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

关于内存池的问题

我需要对内存池的概念和实现做一些澄清.

通过维基上的内存池,它说

也称为固定大小块分配,...,由于这些实现由于可变块大小而受到碎片的影响,由于性能的原因,它们不可能在实时系统中使用它们.

"可变块大小如何导致碎片化"如何发生?固定大小的分配如何解决这个问题?这个维基描述对我来说听起来有点误导.我认为通过固定大小的分配或由可变大小引起的碎片不可避免.在内存池上下文中,特定应用程序的特定设计内存分配器可以避免碎片,或者通过限制使用预期的内存块来减少碎片.

同样通过几个实现示例,例如代码示例1代码示例2,在我看来,使用内存池,开发人员必须非常好地了解数据类型,然后将数据剪切,拆分或组织到链接的内存中块(如果数据接近链表)或分层链接块(如果数据更加层次化,如文件).此外,开发人员似乎必须事先预测他需要多少内存.

好吧,我可以想象这适用于一系列原始数据.C++非原始数据类怎么样,内存模型不是很明显?即使对于原始数据,开发人员是否应该考虑数据类型对齐?

C和C++有好的内存池库吗?

谢谢你的评论!

c++ memory-management fragmentation memory-pool

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

强制仅在某些代码中使用的特定构造函数,而不是其他任何地方

有时,我们需要提供仅用于测试用途的特定构造函数.我们如何强制这样的构造函数仅用于测试代码,而不是其他任何地方.我只是想知道这是否可以在c ++ 11/14中实现.例如,

class A {
public: 
  A() = default; // used only in test code
}
class A_Test : public ::testing::Test {
 private:
  A a; // it is ok.
};
class A_Production {
 private:
  A a;  // compiler error
}
Run Code Online (Sandbox Code Playgroud)

我可以想象使用friend装饰器并将特定的构造函数放入protected限制访问.但遗留代码中还有其他现有的朋友.是否可以在c ++ 1x中创建类似受保护的自定义说明符?

有任何想法吗?

c++ unit-testing mocking c++11 access

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

如何使用pexpect在python中获得子进程的自发输出

这与我在wx.TextCtrl(或底层GTK +)上的另一个多线程问题有关,经过从主线程调用GUI交互的纠正后,我发现它再次出现在管道块缓冲问题上.那么如何从subprocess.stdout获得自发输出?

简而言之,目前我正在使用subprocess.popen来启动一个外部长时间运行的程序.

    launchcmd=["EXTERNAL_PROGRAM_EXE"]
    p = subprocess.Popen(launchcmd, stdin=subprocess.PIPE, 
            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    self.outputThread = BashProcessThread(p.stdout.readline)
    self.outputThread.start()
    # wx.TextCtrl is used to make input/output
    self.textctrl = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER|wx.TE_MULTILINE)
Run Code Online (Sandbox Code Playgroud)

我使用一个单独的线程来读取后台程序的标准输出,用"wx.CallAfter"来回调.

class BashProcessThread(threading.Thread):
    def __init__(self, readlineFunc, textctrl):
        threading.Thread.__init__(self)
        self.readlineFunc = readlineFunc

    def run(self):
        while True:
           line = self.readlineFunc()
           wx.CallAfter(textctrl.AppendText(line))
Run Code Online (Sandbox Code Playgroud)

上面的代码打印出子进程日志消息block-hanging-block(而不是逐行自发),最糟糕的是剩下的5-6行日志消息在用户发送下一个输入之前无法及时打印.

从我以前的帖子中,我知道有pty和pexpect,这可能会让子进程认为它与pseudo-tty进行交互.但是如何使用pexpect,特别是考虑到后台进程是长期的,独立的运行任务?

例如,如果我使用过

child=pexpect.spawn(launchcmd)
Run Code Online (Sandbox Code Playgroud)

如何获取子进程的输出和输入,所以我可以使用wx.TextCtrl打印输出,还可以使用wx.TextCtrl将用户输入转发到子进程?

python multithreading wxpython pipe pexpect

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

什么反斜杠"\"真的意味着什么?

我想知道Java的反斜杠.计算机或编译器如何看到这个反斜杠以及它是如何存储在计算机中的?

我读到反斜杠删除了以下字符的特殊含义.但是,计算机如何处理这个以及在什么条件下以其他方式对待它?

例如\0,C编程中的空字符是字符串的结尾,但它是单个字符还是两个字符,即反斜杠+零?

反斜杠的目的是指示人类还是指示0-1计算机?

compiler-construction

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