小编Arc*_*rus的帖子

在"for"语句中,我应该使用`!=`还是`<`?

我已经看到这两个声明:

for(i=0;i<10;i++) 

for(i=0;i!=10;i++)
Run Code Online (Sandbox Code Playgroud)

我知道当我到达时它们都会停止10,但使用第二个(我听说)似乎更好.有什么不同?我也想知道何时使用迭代器来访问向量的成员,迭代器条件< vec.end()和之间的区别是什么!= vec.end()

c++ loops for-loop conditional-statements

53
推荐指数
6
解决办法
1896
查看次数

删除列表中没有出现在另一个列表中的子串的项目的优雅方法

最近我遇到了这个问题:

假设有一个我想要处理的内容列表:

process_list=["/test/fruit/apple","/test/fruit/pineapple","/test/fruit/banana","/test/tech/apple-pen","/test/animal/python","/test/animal/penguin"]
Run Code Online (Sandbox Code Playgroud)

我想用其他列表排除某些内容,例如:

exclude_list=["apple","python"]
Run Code Online (Sandbox Code Playgroud)

在我对其应用exclude_list之后,process_list应该是这样的(任何包含子的process_list项:

["/test/fruit/banana","/test/animal/penguin","/test/fruit/pineapple"]
Run Code Online (Sandbox Code Playgroud)

或者如果exclude_list是: exclude_list=["pen","banana"]

应用过滤器后,process_list应为此:

["/test/fruit/apple","/test/fruit/pineapple","/test/animal/python"]
Run Code Online (Sandbox Code Playgroud)

所以我最初尝试的是:

for item in exclude_list:
    for name in (process_list):
        if item in name:
            process_list.remove(name)
Run Code Online (Sandbox Code Playgroud)

当然这不起作用,因为for不允许在使用循环迭代它时从列表中删除元素.代码只删除了第一个匹配,然后停止了.

那么我想出了另一个列表的方法:

deletion_list=[] #Track names that need to be deleted
for item in exclude_list:
    for name in (process_list):
        if item in name:
            deletion_list.append(name)
# A list comprehension
process_list=[ x for x in process_list if x not in deletion_list ]  
Run Code Online (Sandbox Code Playgroud)

它有效,但我的胆量告诉我可能有更优雅的方式.现在需要另一个列表来存储需要删除的名称.有任何想法吗?

python list-comprehension list

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

为什么使用`int(*p)[5]`的结果如此令人困惑?

我知道这int (*p)[5]意味着一个指向5个int数组的指针.所以我在下面编写这个程序:

#include <iostream>
using namespace std;

int main()
{
  int a[5]={0,1,2,3,4};
  int (*q)[5]=&a;
  cout<<a<<endl;         
  cout<<q<<endl;
  cout<<*q<<endl;        
  cout<<**q<<endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上,结果是:

0xbfad3608
0xbfad3608       //?__?
0xbfad3608
0
Run Code Online (Sandbox Code Playgroud)

我能理解这*q意味着地址 a[0]**q意味着价值a[0],但为什么和?q有相同的价值?我心情不好,应该是他们的地址!我完全糊涂了.有人请帮帮我.请!a*q

c++ pointers pointer-to-array

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

每个多处理器 VS 的最大驻留线程数。每个多处理器的最大驻留块数

我在我的 K20 上运行了一个关于并发内核执行资源的问题。我的流只有一点重叠,然后我认为这可能是因为资源限制。所以我参考了手册,我发现:每个多处理器的最大驻留块数为16,每个多处理器的最大驻留线程数为2048。

所以我的问题是:如果我在每个块中有 1024 个线程的 96 个块的内核。该内核将并行使用多少个 SM?

答案 1:96/16 = 6

答案 2:1024/2048*96 = 48(K20 只有 13 个 SM,那么这个内核会如何表现?)

或者也许你有另一个答案?

cuda hpc

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