C++中的multimap看起来很奇怪,我想知道为什么
#include <iostream>
#include <unordered_map>
using namespace std;
typedef unordered_multimap<char,int> MyMap;
int main(int argc, char **argv)
{
MyMap map;
map.insert(MyMap::value_type('a', 1));
map.insert(MyMap::value_type('b', 2));
map.insert(MyMap::value_type('c', 3));
map.insert(MyMap::value_type('d', 4));
map.insert(MyMap::value_type('a', 7));
map.insert(MyMap::value_type('b', 18));
for(auto it = map.begin(); it != map.end(); it++) {
cout << it->first << '\t';
cout << it->second << endl;
}
cout << "all values to a" << endl;
for(auto it = map.find('a'); it != map.end(); it++) {
cout << it->first << '\t' << it->second << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出: …
(这是关于gcc和clang的问题,但可能适用于其他编译器.)
如果我编译我的C或C++代码,并使用生成调试信息-g开关,这是否本身降解以任何方式编译的程序的性能...(1)用最小优化(-O0)?(2.)最大化优化(-O3)?
注意:我并不是说必须解析/加载可执行文件的性能损失,由于额外的内容,这可能会更大; 我指的是运行的代码.
以下代码使用g ++ 7.3.0成功编译,无法使用clang ++ 6.0.0进行编译(编译标志为-std=c++17 -Wall -Wextra -Werror -pedantic-errors):
auto foo = [](auto, auto... tail) {
if constexpr (sizeof...(tail) > 0)
{
return foo(tail...);
}
else
{
return 42;
}
};
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
clang ++编译错误信息:
错误:使用推导类型'auto'声明的变量'foo'不能出现在自己的初始化程序中
Run Code Online (Sandbox Code Playgroud)return foo(tail...);
在这种情况下,符合标准的行为是什么?
如果我使用其网格具有维度的网格启动我的内核:
dim3 block_dims(16,16);
Run Code Online (Sandbox Code Playgroud)
网格块现在如何分成经线?这样一个块的前两行是形成一个warp,还是前两列,还是这个任意排序?
假设GPU计算能力为2.0.
我只发现本地内存比寄存器内存慢,每个线程两种类型.
共享内存应该很快,但它比[线程]的本地内存更快?
我想要做的是一种中值滤波器,但具有给定的百分位数而不是中位数.因此,我需要获取列表的块,对它们进行排序,然后选择一个合适的列表.但我无法开始对共享内存列表进行排序或出现问题.只要复制到本地内存,我会失去很多性能吗?
我注意到在精美打印元组的上下文中提到了"索引技巧".这听起来很有趣,所以我按照链接.
嗯,那不顺利.我理解了这个问题,但实际上并不能跟踪发生的事情.为什么我们甚至需要任何指数?那里定义的不同功能如何帮助我们?什么是'裸露'?等等
有人可以为参数包和可变元组的专家提供那种东西的游戏吗?
是否可以使用 C/C++ 预处理器将源文件中的行数计算为宏或某种编译时可用值?例如,我可以在下面替换MAGIC1,MAGIC2并MAGIC3在使用时以某种方式获得值 4MAGIC3吗?
MAGIC1 // can be placed wherever you like before the relevant
// lines - either right before them, or in global scope etc.
foo(); MAGIC2
bar(); MAGIC2
baz(); MAGIC2
quux(); MAGIC2
// ... possibly a bunch of code here; not guaranteed to be in same scope ...
MAGIC3
Run Code Online (Sandbox Code Playgroud)
笔记:
这个“管道”,存储库的主页说,不像范围的使用,即使它看起来一样:它不是基于懒惰的拉动,而是基于急切的推动。但是据说不能使用范围库来执行各种“管道”操作。例如:
我不太明白为什么原则上是这样。(当然,除了无法获得结束迭代器/哨兵的范围。)
在 C++20 中,std::swap变成constexpr函数。
我知道标准库在标记事物方面确实落后于语言constexpr,但到 2017 年,<algorithm>它和其他一些东西几乎都是 constexpr。然而 -std::swap不是。我依稀记得有一些奇怪的语言缺陷阻止了那个标记,但我忘记了细节。
有人可以简洁明了地解释这一点吗?
动机:需要理解为什么在 C++11/C++14 代码中标记一个std::swap()-like 函数可能是个坏主意constexpr。
我正在尝试用介子配置一个项目。具体来说,我正在尝试设置一些选项。
meson config告诉我,除其他外:
Core options:
Option Current Value Possible Values Description
------ ------------- --------------- -----------
buildtype debug [plain, debug, debugoptimized, release, minsize, custom] Build type to use
Base options:
Option Current Value Possible Values Description
------ ------------- --------------- -----------
b_lto false [true, false] Use link time optimization
Run Code Online (Sandbox Code Playgroud)
(当然,其他选项已从此打印输出中删除。)
所以,我写:
meson build . --buildtype=release
Run Code Online (Sandbox Code Playgroud)
在我的构建目录中,一切顺利 - 没有警告或错误(我仔细检查了选项值是否已更改)。然后我写:
meson build . --b_lto=true
Run Code Online (Sandbox Code Playgroud)
但这让我感到:
meson: error: unrecognized arguments: --b_lto=true
Run Code Online (Sandbox Code Playgroud)
我也尝试过-b_lto=true、、、、。而所有这些都没有价值。没有运气。--b_lto trueb_lto=trueb_lto truetrue
那么我该如何设置这些“基本选项”呢?
command-line command-line-arguments buildconfiguration meson-build