c++ - 另一种复制算法

标签 c++ boost stl boost-lambda

我有两个 vector 。

vector<Object> objects;
vector<string> names;

这两个 vector 被填充并且具有相同的大小。 我需要一些算法来对对象变量进行赋值。它可能正在使用 boost::lambda。 比方说:

some_algoritm(objects.begin(), objects.end(), names.begin(), bind(&Object::Name, _1) = _2);

有什么建议吗?

最佳答案

我认为您需要 std::for_each 因为每个 Object 实例都被就地修改:

std::vector<std::string>::const_iterator names_it = static_cast<const std::vector<std::string>&>(names).begin();

std::for_each(objects.begin(), objects.end(),
              boost::lambda::bind(&Object::Name, boost::lambda::_1) = *boost::lambda::var(names_it)++);

这是一个完整的、可编译的示例:

#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>

class Object
{
public:
    std::string Name;

    Object(const std::string& Name_ = "")
        : Name(Name_)
    {
    }
};

int main()
{
    std::vector<Object> objects(3, Object());
    std::vector<std::string> names;
    names.push_back("Alpha");
    names.push_back("Beta");
    names.push_back("Gamma");
    std::vector<std::string>::const_iterator names_it = static_cast<const std::vector<std::string>&>(names).begin();

    std::for_each(objects.begin(), objects.end(), boost::lambda::bind(&Object::Name, boost::lambda::_1) = *boost::lambda::var(names_it)++);

    std::vector<Object>::iterator it, end = objects.end();
    for (it = objects.begin(); it != end; ++it) {
        std::cout << it->Name << std::endl;
    }

    return EXIT_SUCCESS;
}

输出:

Alpha
Beta
Gamma

关于c++ - 另一种复制算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676291/

相关文章:

c++ - decltype(auto) 有哪些用途?

c++ - 以下代码中的错误是什么?

python - 使用 C++ 中的方法创建实例并将其传递给 Python

c++ - 隐式调用构造函数时 std::move 的行为是什么?

c++ - 空流,我必须包括 ostream 吗?

c++ - 使用带有动态库的 Eigen 和 Visual Studio 2013 的内存对齐错误

*不*初始化其成员的C++ vector ?

c++ - push_back() 时出现段错误

c++ - 当 KEY 为 boost::optional 参数时用于 boost 多索引的迭代器

c++ - 具有自定义顶点属性的图的 boost 支配树