从STL范围获取[伪]随机元素的好方法是什么?
我能想到的最好的就是做std::random_shuffle(c.begin(), c.end()),然后从我的随机元素c.begin().
但是,我可能想要一个const容器中的随机元素,或者我可能不想要完全洗牌的成本.
有没有更好的办法?
处理const向量时,以下方法不起作用:
const std::vector<std::string> v;
v.push_back("test"); // error: v cannot be modified
Run Code Online (Sandbox Code Playgroud)
相反,您必须在构造它的同一行初始化向量.但是,即使有这个限制,boost::make_transform_iterator也可以在将它们推入v之前轻松地使用另一个vector的元素.在这个例子中,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 };
Run Code Online (Sandbox Code Playgroud)
我已经看了可用的功能<iterator>,但没有看到等效功能.它只是缺失或标准库没有它的原因吗?
给定一个std::vector包含MyClass的对象.如何创建另一个向量,该向量仅包含一个MyClass成员的数据std::copy?我想我必须实现一个自定义,back_inserter但到目前为止我无法弄清楚如何做到这一点.
struct MyClass {
int a;
}
std::vector<MyClass> vec1;
// I could copy that to another vector of type MyClass using std::copy.
std::copy(vec1.begin(), vec1.end(); std::back_inserter(someOtherVec)
// However I want just the data of the member a, how can I do that using std::copy?
std::vector<int> vec2;
Run Code Online (Sandbox Code Playgroud)