小编Ano*_*ity的帖子

stringstream.rdbuf导致cout失败

当我在某个时刻添加一个cout时,我很惊讶地看到我的程序突然变得安静,所以我隔离了负责的代码:

std::stringstream data;
data<<"Hello World\n";
std:std::fstream file{"hello.txt", std::fstream::out};
file<<data.rdbuf();
std::cout<<"now rdbuf..."<<std::endl;
std::cout<<data.rdbuf()<<std::endl;
std::cout<<"rdbuf done."<< std::endl;
Run Code Online (Sandbox Code Playgroud)

该计划在没有最后一场比赛的情况下悄然退出.到底是怎么回事?如果我改变了最后一个.rdbuf(),.str()那么它就完成了.

c++

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

将负索引包装到数组的大小

给定一个长度数组sizen该数组的索引,如何包装索引以使其始终在 内size-1?对于正数,它很简单n % size,但是如何在n为负数时实现向后环绕?

我想出了什么:

int wrap(int size, int n) {
    if (n >= 0)
        return n % size;
    else
        return abs(size + n) % size;
}
Run Code Online (Sandbox Code Playgroud)

但这仅适用于n <= size; 如何使它适用于任何人n

预期输出:

wrap(4, -1) == 3
wrap(4, -2) == 2
wrap(4, -3) == 1
wrap(4, -4) == 0
wrap(4, -5) == 3
wrap(4, -6) == 2
wrap(4, -7) == 1
wrap(5, -8) == 0
Run Code Online (Sandbox Code Playgroud)

c++

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

Make:使用所有目标文件的通配符

我有一个看起来像这样的 Makefile:

CC=cc
CFLAGS=-g -std=c99 -Wfatal-errors
OBJS=$(wildcard *.o)

all: main.o cmdargs.o io.o
    $(CC) -o app $(OBJS)

main.o: main.c
    $(CC) -c main.c $(CFLAGS)
cmdargs.o: cmdargs.c
    $(CC) -c cmdargs.c $(CFLAGS)
io.o: io.c
    $(CC) -c io.c $(CFLAGS)

clean:
    @rm -rf app $(OBJS)
Run Code Online (Sandbox Code Playgroud)

每当我make all在干净之后运行时,都会出现错误

抄送-o

对“main”的未定义引用

但是当我第二次运行它时,一切都按预期进行。脚本有什么问题,我们该如何修复它?

makefile

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

在同一个CMake项目中有多个make目标

在我的项目中,我有一个如下所示的makefile:

CXX = clang++
CFLAGS = -std=c++11 
COMMON_SOURCES = file1.cpp file2.cpp
TARGET_SOURCES = main.cpp
TEST_SOURCES = run_tests.cpp test_file1.cpp test_file2.cpp
COMMON_OBJECTS = $(COMMON_SOURCES:.c=.o)
TARGET_OBJECTS = $(TARGET_SOURCES:.c=.o)
TEST_OBJECTS = $(TEST_SOURCES:.c=.o)
EXECUTABLE = build/application
TEST_EXECUTABLE = build/tests
.PHONY: all target tests
all: target tests
target: $(EXECUTABLE)
tests: $(TEST_EXECUTABLE)
clean:
    rm build/tests & rm build/application &
$(EXECUTABLE): $(COMMON_OBJECTS) $(TARGET_OBJECTS)
    $(CXX) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(TEST_EXECUTABLE): $(COMMON_OBJECTS) $(TEST_OBJECTS)
    $(CXX) $(CFLAGS) $(LDFLAGS) $^ -o $@
.c.o:
    $(CXX) $(CFLAGS) $< -o $@
Run Code Online (Sandbox Code Playgroud)

这让我运行make tests或者 …

project-management makefile cmake

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

删除前手动调用析构函数

auto obj = new Object;
obj->~Object();
delete obj;
Run Code Online (Sandbox Code Playgroud)

我知道这很不寻常,但它是否定义了行为?它会引起任何令人惊讶的问题吗?

c++ destructor undefined-behavior delete-operator

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

从其他列表的某些属性中创建一个列表

我有一个包含其他列表的列表,并且只想从其他列表中的第n个项目创建新列表.

my_list = [[1,2,3],['a','b','b'],[100,200,300]]

new_list = make_new_list(mylist, index=2)

new_list = [2,'b',200]
Run Code Online (Sandbox Code Playgroud)

我知道如何设计一个抓住所有第二个元素的函数,但我也知道总有一些pythonic列表理解能够更顺利地完成.什么是列表理解?

python list

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

从词典列表中获取新列表

从字典对象列表开始,如何根据键获取包含一些字典值的新列表?

例如:

my_list = [ {'foo':1},{'bar':2},{'foo':3} ]
new_list = grab_values(my_list, 'foo')
Run Code Online (Sandbox Code Playgroud)

我们想要什么:

new_list = [1, 3]
Run Code Online (Sandbox Code Playgroud)

python dictionary list

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

如何在此条件中使用lock_guard

线程具有以下控制流程:

mutex.lock()
if (condition) {
    // do synced things
    mutex.unlock();
    // do parallel things
} else {
    // do other synced things
    mutex.unlock();
    // do other parallel things
}
Run Code Online (Sandbox Code Playgroud)

注意这四个do部分如何执行不同的事情.

如何将直接调用替换为锁定和解锁std::lock_guard而改为使用?

c++ multithreading

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

使用函数更改字典键

假设有一个字典像

d1 = {
    'a b':1,
    'c-d':2,
    'Ef':3
}
Run Code Online (Sandbox Code Playgroud)

我想运行一个根据某些规则重命名所有键的函数,例如小写并将空格和 - 更改为 _。从而得到结果:

d2 = {
    'a_b':1,
    'c_d':2,
    'ef':3
}
Run Code Online (Sandbox Code Playgroud)

这个问题与本网站上有关重命名字典键的其他类似问题之间的区别在于,这里我们事先不知道这些列。所以我们想对所有键运行重命名函数(以​​规范化它们或类似的东西)。

python

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

如何根据元组的值排序列表

从一些元组列表开始.

a = [(10,10),(20,20)]
b = [(15,15),(25,25)]
Run Code Online (Sandbox Code Playgroud)

我们可以使用什么列表理解来创建新列表,其中的项目a, b按大小排序?

c = [(10,10),(15,15),(20,20),(25,25)]
Run Code Online (Sandbox Code Playgroud)

python list

0
推荐指数
2
解决办法
116
查看次数

这些调用超类构造函数的方法有什么区别?

如果调用超类启动函数的以下用法之间的重要区别怎么办?

class Child_1(Parent):
    def __init__(self):
        super(Child, self).__init__()

class Child_2(Parent):
    def __init__(self):
        super(Parent, self).__init__()

class Child_3(Parent):
    def __init__(self):
        Parent.__init__(self)
Run Code Online (Sandbox Code Playgroud)

python inheritance

0
推荐指数
1
解决办法
97
查看次数

使用防护来切换互斥锁

如何重构以下代码以使用推荐的lock_guards?

bool locked = false;
bool sync() {
    if (locked) {
        mutex.unlock();
    } else {
        mutex.lock();
    }
    locked = !locked;
    return locked;
}
Run Code Online (Sandbox Code Playgroud)

期望的使用模式:

while (sync()) {
    // do safe things
}
Run Code Online (Sandbox Code Playgroud)

基本上我试图模仿withPython 的声明.例:

from multiprocessing import Lock
with Lock():
    # do safe things
Run Code Online (Sandbox Code Playgroud)

c++ mutex

0
推荐指数
1
解决办法
197
查看次数

模板化类中参数包的语法

我有一个模板化的类,我想给出一个参数包类型方法,如下所示:

template<class T>
class MyClass {
public:
    template<class U>
    add(U u) {}

    template<class U, typename... Args>
    add(U u, Args... args) {
    }
};
Run Code Online (Sandbox Code Playgroud)

请注意,TU始终是相同的类型.

我的问题很简单:是否有可能直接引用T而不是U在这种情况下?我的工作是什么,但如果我T直接提到的话会更清楚意图是什么.

c++ templates

0
推荐指数
1
解决办法
40
查看次数