小编hun*_*nse的帖子

为什么列表推导写入循环变量,但生成器不写?

如果我对列表推导做了些什么,它会写入一个局部变量:

i = 0
test = any([i == 2 for i in xrange(10)])
print i
Run Code Online (Sandbox Code Playgroud)

这打印"9".但是,如果我使用生成器,它不会写入局部变量:

i = 0
test = any(i == 2 for i in xrange(10))
print i
Run Code Online (Sandbox Code Playgroud)

这打印"0".

这种差异有什么好的理由吗?这是设计决策,还是生成器和列表推导的实现方式的随机副产品?就个人而言,如果列表推导没有写入局部变量,那对我来说似乎更好.

python list-comprehension generator python-2.7

76
推荐指数
3
解决办法
2331
查看次数

数组作为模板参数:堆栈还是堆?

与堆相比,我对堆栈的了解非常简陋,但是当涉及到数组时,从我所知道的内容就是在堆栈上创建的

float x[100];
Run Code Online (Sandbox Code Playgroud)

而这样的东西是在堆上创建的

float* x = new float[100];
Run Code Online (Sandbox Code Playgroud)

但是如果我创建一个模板数组类,并以"堆栈"数组类型(如float[100])传递它会发生什么?例:

#include <iostream>

using namespace std;

template <class T>
class Array {
public:
    int size;
    T* data;

    Array(int size_) : size(size_) {
        data = new T[size];
    }

    ~Array() {
        delete [] data;
    }
};

int main() {
    int m = 1000000;
    const int n = 100;
    Array<float[n]>* array = new Array<float[n]>(m);

    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++) …
Run Code Online (Sandbox Code Playgroud)

c++ arrays templates heap-memory stack-memory

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