相关疑难解决方法(0)

如何从C++容器中获取随机元素?

从STL范围获取[伪]随机元素的好方法是什么?

我能想到的最好的就是做std::random_shuffle(c.begin(), c.end()),然后从我的随机元素c.begin().

但是,我可能想要一个const容器中的随机元素,或者我可能不想要完全洗牌的成本.

有没有更好的办法?

c++ algorithm stl

48
推荐指数
4
解决办法
4万
查看次数

标准库中的boost :: make_transform_iterator相当于什么?

处理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>,但没有看到等效功能.它只是缺失或标准库没有它的原因吗?

c++ boost iterator c++11

11
推荐指数
1
解决办法
3507
查看次数

用于std :: copy的自定义插入器

给定一个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)

c++ std

9
推荐指数
1
解决办法
5964
查看次数

标签 统计

c++ ×3

algorithm ×1

boost ×1

c++11 ×1

iterator ×1

std ×1

stl ×1