小编ati*_*tis的帖子

std :: tuple和std :: tuple <std :: tuple>是否被std :: vector视为相同的类型?

我有一个像这样定义的变量

auto drum = std::make_tuple
          ( std::make_tuple
          ( 0.3f
          , ExampleClass
          , [](ExampleClass& instance) {return instance.eGetter ();}
          )
          );
Run Code Online (Sandbox Code Playgroud)

我希望drum成为元组的元组.(即((a, b, c))).

我有另一个像这样定义的变量

auto base = std::make_tuple
          ( 0.48f
          , ExampleClass
          , [](ExampleClass& instance) {return instance.eGetter ();}
          );
Run Code Online (Sandbox Code Playgroud)

我希望它只是三元素的元组(即(a, b, c))

我还有一个定义如下的向量

std::vector<std::tuple<std::tuple< float
                                 , ExampleClass
                                 , std::function<float (ExampleClass&)>
                                 >>> listOfInstruments;
Run Code Online (Sandbox Code Playgroud)

现在,如果我添加drum,listOfInstruments我希望没有错误.

事实确实如此 listOfInstruments.push_back(drum);

我预计错误在这里,listOfInstuments.push_back(base);但代码编译得很好.

由于listOfInstruments有'元组元组',不应该只添加'元组'导致一些错误?除非双方()(())通过被认为是同一类型std::vector.或者我完全错了,还有其他工作在这里吗?

似乎无法弄明白.

c++ tuples

16
推荐指数
1
解决办法
1122
查看次数

使用 std::transform 将 std::vector 容器转换为 std::set

更具体地说,我有一些结构的向量

std::vector<SomeStruct> extensions = getThoseExtensions();
Run Code Online (Sandbox Code Playgroud)

wheresomeStructVariable.extensionName返回一个字符串。

我想创建一组extensionName,像这样的std::set<const char*>

使用一些for循环完成后,过程相当简单,但我想改用std::transformfrom <algorithm>


std::transform 有四个参数。

1,2。第一个范围(将第一个范围从和转换为)

3 . 第二个范围/插入器(转换第二个范围)

4 . 一个函数


这是我到目前为止

auto lambdaFn = 
    [](SomeStruct x) -> const char* { return x.extensionName; };

 std::transform(availableExtensions.begin(),
                availableExtensions.end(),
                std::inserter(xs, xs.begin()),
                lambdaFn);
Run Code Online (Sandbox Code Playgroud)

因为std::back_inserterstd::set我使用std::inserter(xs, xs.begin()).


问题是我试图在我的 lambda 函数中返回堆栈内存。那么我该如何解决这个问题呢?

奇怪的是,如果我return从函数中删除它就像我期望的那样工作!但我不明白为什么,这让我害怕未来的影响。


编辑:

我使用的几种结构来代替SomeStructVkExtensionProperties定义在vulkan_core

typedef struct VkExtensionProperties {
    char        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
    uint32_t    specVersion;
} VkExtensionProperties; …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

标签 统计

c++ ×2

c++11 ×1

tuples ×1