我有两个向量.
vector<Object> objects;
vector<string> names;
Run Code Online (Sandbox Code Playgroud)
填充这两个向量并具有相同的大小.我需要一些算法来分配对象变量.它可以使用boost :: lambda.让我们说:
some_algoritm(objects.begin(), objects.end(), names.begin(), bind(&Object::Name, _1) = _2);
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
在Perl 5中,我们可以应用函数式编程技术(使用闭包,高阶函数,如map,grep等).但功能构成怎么样?让我们说,在Haskell中,可以使用(.)函数很容易地完成它:
map (negate . abs) [-3, 2, 4, -1, 5]
Run Code Online (Sandbox Code Playgroud)
在Perl中,这个"点函数"的等价物是什么?
使用STL算法的经典示例:
void foo(int){};
vector<int> collection;
collection.push_back(3);
collection.push_back(4);
... etc.
std::for_each(collection.begin(), collection.end(), bind(foo, _1));
Run Code Online (Sandbox Code Playgroud)
但是,如果我们有多个函数,需要使用相同的参数值调用,该怎么办:
void bar(int){};
void beer(int){};
... etc.
Run Code Online (Sandbox Code Playgroud)
每次使用不同的函数重复for_each算法都不是选项.我需要更优雅的解决方案.
我们有简化的课程:
class A
{
bool val_;
public:
A() : val_(true) {}
bool isNew() const { return val_; }
void setDirty() { val_ = false; }
};
Run Code Online (Sandbox Code Playgroud)
以及这类对象的向量:
vector<A> coll;
coll.push_back(A());
coll.push_back(A());
coll.push_back(A());
coll.push_back(A());
coll[1].setDirty();
coll[3].setDirty();
Run Code Online (Sandbox Code Playgroud)
我需要一些优雅的解决方案来重新排列(排序)向量中的元素,以便未修改的对象将在序列的开头分组.