小编ein*_*ica的帖子

unordered_multimap - 迭代find()的结果产生具有不同值的元素

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)

这是输出: …

c++ iteration stl unordered-map c++11

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

使用-g进行编译本身会降低性能吗?

(这是关于gcc和clang的问题,但可能适用于其他编译器.)

如果我编译我的C或C++代码,并使用生成调试信息-g开关,这是否本身降解以任何方式编译的程序的性能...(1)用最小优化(-O0)?(2.)最大化优化(-O3)?

注意:我并不是说必须解析/加载可执行文件的性能损失,由于额外的内容,这可能会更大; 我指的是运行的代码.

c c++ gcc clang debug-information

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

如果constexpr在递归泛型lambda中:不同的编译器行为

以下代码使用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'不能出现在自己的初始化程序中

return foo(tail...);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,符合标准的行为是什么?

c++ lambda language-lawyer c++17 if-constexpr

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

CUDA块如何分为经线?

如果我使用其网格具有维度的网格启动我的内核:

dim3 block_dims(16,16);
Run Code Online (Sandbox Code Playgroud)

网格块现在如何分成经线?这样一个块的前两行是形成一个warp,还是前两列,还是这个任意排序?

假设GPU计算能力为2.0.

cuda gpgpu gpu-warp

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

本地内存比CUDA中的共享内存慢吗?

我只发现本地内存比寄存器内存慢,每个线程两种类型.

共享内存应该很快,但它比[线程]的本地内存更快?

我想要做的是一种中值滤波器,但具有给定的百分位数而不是中位数.因此,我需要获取列表的块,对它们进行排序,然后选择一个合适的列表.但我无法开始对共享内存列表进行排序或出现问题.只要复制到本地内存,我会失去很多性能吗?

c cuda gpu-programming gpu-shared-memory gpu-local-memory

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

有人可以解释一下"指数技巧"吗?

我注意到在精美打印元组的上下文中提到了"索引技巧".这听起来很有趣,所以我按照链接.

嗯,那不顺利.我理解了这个问题,但实际上并不能跟踪发生的事情.为什么我们甚至需要任何指数?那里定义的不同功能如何帮助我们?什么是'裸露'?等等

有人可以为参数包和可变元组的专家提供那种东西的游戏吗?

c++ tuples indices variadic-templates c++11

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

使用宏计算源文件行数?

是否可以使用 C/C++ 预处理器将源文件中的行数计算为宏或某种编译时可用值?例如,我可以在下面替换MAGIC1,MAGIC2MAGIC3在使用时以某种方式获得值 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++ 的帮助下实现,而不是 C 构造,那也是可以接受的,但不可取(即我想要一些适用于 C 的东西)。
  • 显然,这可以通过一些外部处理器脚本运行源文件来完成,但这不是我要问的。

c++ c-preprocessor

14
推荐指数
5
解决办法
1100
查看次数

为什么范围不能用于管道库功能?

乔纳森博卡拉(作者流利C ++)写了一个叫做库的管道

这个“管道”,存储库的主页说,不像范围的使用,即使它看起来一样:它不是基于懒惰的拉动,而是基于急切的推动。但是据说不能使用范围库来执行各种“管道”操作。例如:

  • unzip - 采用压缩输入 - 本质上是一系列 k 元组 - 并产生 k 个单独的、独立的输出。
  • fork - 生成容器/范围的多个(独立)副本。

我不太明白为什么原则上是这样。(当然,除了无法获得结束迭代器/哨兵的范围。)

c++ c++14 range-v3 std-ranges

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

为什么在 C++20 之前 std::swap 没有标记为 constexpr ?

在 C++20 中,std::swap变成constexpr函数。

我知道标准库在标记事物方面确实落后于语言constexpr,但到 2017 年,<algorithm>它和其他一些东西几乎都是 constexpr。然而 -std::swap不是。我依稀记得有一些奇怪的语言缺陷阻止了那个标记,但我忘记了细节。

有人可以简洁明了地解释这一点吗?

动机:需要理解为什么在 C++11/C++14 代码中标记一个std::swap()-like 函数可能是个坏主意constexpr

c++ constexpr c++11 c++20

14
推荐指数
2
解决办法
703
查看次数

如何使用介子设置基本选项?

我正在尝试用介子配置一个项目。具体来说,我正在尝试设置一些选项。

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

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