【问题标题】:Initialize std::vector from std::list using iterators使用迭代器从 std::list 初始化 std::vector
【发布时间】:2011-09-17 06:16:44
【问题描述】:

我正在尝试有效地从 std::list 初始化一个 std::vector,但我没有任何运气。

例如,它想这样:

void myFunc(std::list<double>::iterator begin, std::list<double>::iterator end)
{
    std::vector <double> data(begin, end);
    // or
    std::vector <double> data;
    data::insert(data.begin(), data.end());
}

但是,这不起作用,因为容器似乎只支持它们自己的迭代器类型?我错过了什么吗?我想要完成的事情不是那么容易吗?

【问题讨论】:

    标签: stl stdvector stdlist


    【解决方案1】:

    你的第一个版本

    std::vector<double> data(begin, end);
    

    是正确的。

    你的第二个版本应该是

    std::vector<double> data;
    data.insert(data.begin(), begin, end);
    

    【讨论】:

    • 在这两种情况下,我都会收到此错误 error C2678: binary '+' : no operator found which take a left-hand operand of type 'std::list<_ty>::_Iterator<_secure_validation>' (或没有可接受的转换)
    • 好吧,原来这是我的错。我将带有偏移量 (mylist.begin() + 40) 的 std::list 迭代器传递给函数,这就是罪魁祸首。就像你说的,否则它会起作用。感谢您的确认。
    猜你喜欢
    • 2012-05-07
    • 2012-09-12
    • 2013-06-06
    • 2017-04-17
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2012-06-09
    相关资源
    最近更新 更多