gpt4 book ai didi

c++ - std::transform 临时对象

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:27 24 4
gpt4 key购买 nike

我有一个返回对象 vector 的函数,我想创建一个从这些对象中获取的成员 vector 。我正在使用 std::transform 来执行此操作。但是,代码段。 GDB 不是很有帮助。谁能解释发生了什么?

#include <algorithm>
#include <iostream>
using namespace std;

class Container
{
private:
string _id;

public:
Container(const string &str): _id(str) {}

const decltype(_id) &id() const {
return this->_id;
}

};

Container a{"hello"}, b{"world"};

vector<Container *> fn()
{
return {&a,&b};
}

int main() {
vector<string> ids;
const auto &elements = fn();
std::transform(elements.begin(), elements.end(), ids.begin(), [](const Container *container){ return container->id();});

}

最佳答案

ids.begin() 不是有效长度范围 elements.size() 的迭代器,因为 ids 是空的并且elements 的大小为 2。

您可能需要 std::back_inserter(ids) 代替:

std::vector<std::string> ids;

std::transform(elements.begin(), elements.end(),
std::back_inserter(ids),
[](const Container *container){ return container->id();});

assert(ids.size() == elements.size());

关于c++ - std::transform 临时对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com