小编Арт*_*вый的帖子

为什么 std::reduce 需要交换性?

https://en.cppreference.com/w/cpp/algorithm/reduce

它说如果操作不是可交换的,则操作的行为未定义,但为什么呢?我们只是将数组分成块,然后合并结果。是否只需要具有关联性?

c++ c++17

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

列表理解引发 RuntimeError

为什么这段代码运行良好并且不抛出异常?

def myzip(*args):
    iters = [iter(arg) for arg in args]
    try:
        while True:
            yield tuple([next(it) for it in iters])
    except StopIteration:
        return


for x, y, z in myzip([1, 2], [3, 4], [5, 6]):
    print(x, y, z)
Run Code Online (Sandbox Code Playgroud)

但如果这条线

yield tuple([next(it) for it in iters])
Run Code Online (Sandbox Code Playgroud)

替换为

yield tuple(next(it) for it in iters)
Run Code Online (Sandbox Code Playgroud)

然后一切都停止工作并抛出RuntimeError?

python list-comprehension python-2.7 python-3.x python-zip

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

“using namespace ...”是否会增加编译时间或者会以某种方式影响性能?

using namespace ...增加编译时间还是会以某种方式影响性能?我听说这会稍微影响编译时间,但是为什么呢?

c++

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

作为比较器的函数类

1)如果我希望集合按降序存储元素,我可以写:

set<int, greater<int>> s;
Run Code Online (Sandbox Code Playgroud)

但我也可以

set<int, greater<>> s;
Run Code Online (Sandbox Code Playgroud)

编译器如何理解这一点?

2)为什么在下面的情况下

vector<int> a;
binary_search(a.begin(), a.end(), 5, greater<>());
Run Code Online (Sandbox Code Playgroud)

我必须写Greater<>(),而不是Greater<>。这有什么原因不能在任何地方都做同样的事情?

c++ templates

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

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

我在使用shared_ptr 时遇到问题。为什么这段代码会抛出SEGV?

为什么这段代码会抛出SEGV?我有两个简单的结构,其中一个字段共享 ptr。我收到“SEGV 未知地址”。

struct B;

struct A {
    shared_ptr<B> p;
};

struct B {
    shared_ptr<A> p;
};

int main() {
    shared_ptr<A> p1;
    shared_ptr<B> p2;
    p2->p = p1; // falls here

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

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