【发布时间】:2014-11-22 06:44:47
【问题描述】:
在处理 const 向量时,以下内容不起作用:
const std::vector<std::string> v;
v.push_back("test"); // error: v cannot be modified
相反,您必须在构造向量的同一行初始化向量。然而,即使有这个限制,boost::make_transform_iterator 也可以很容易地在将另一个向量的元素推入 v 之前对其进行操作。在此示例中,convert 是一个一元函数,它返回输入元素的转换版本:
auto beg = boost::make_transform_iterator(args.begin(), convert);
auto end = boost::make_transform_iterator(args.end(), convert);
const std::vector<const char*> vc { beg, end };
我查看了<iterator> 中可用的功能,但没有看到等效功能。它只是缺少它还是标准库没有它的原因?
【问题讨论】:
-
如果有一个等价的,它很可能被称为
std::make_transform_iterator。没有一个。 boost(和其他库)中有很多有用的东西不在标准库中。 -
您要做什么并不明显。也许
const std::vector<std::string> v={"hello","world"};? -
@Marc 不,我希望
vc避免被修改,因为它将由c_str()填充,我已经阅读过,如果vc调整大小或类似的东西,可能会导致指针无效.所以我试图在一行上初始化它,而不是在第二行上使用 std::transform。 -
对不起,我仍然不知道你想要什么,我会把它留给其他人,但一个更好的例子可能会有所帮助:你的第一个块中的
test和 @987654332 之间的关系是什么@ 在第二个? -
@Marc 哦,我明白你的意思了。第一个示例只是显示 push_back 为 const 时的编译器错误。