【问题标题】:C++ copy specified vector content to another vector [duplicate]C ++将指定的向量内容复制到另一个向量[重复]
【发布时间】:2013-03-06 20:46:04
【问题描述】:

我创建了一个向量:

std::vector<std::string> mero; // earlier it filled with more than 500 data

之后我想创建另一个向量,它只占用mero 向量的一部分。 (例如:从第 100 个到第 250 个)

【问题讨论】:

    标签: c++ vector copy


    【解决方案1】:

    std::vector 的构造函数(this link 中的第 4 个)需要两个迭代器。它构造了一个新向量,包括从第一个迭代器(包括)到第二个迭代器(不包括)的所有元素。

    std::vector<std::string> partOfMero(mero.begin() + 100, mero.begin() + 250);
    

    这将包括 mero[100]mero[249] 在新构建的向量中。

    【讨论】:

    • 谢谢,工作正常! :-)
    • 令人困惑的是它不包括 250。定义中的名称说 [first, last] 令人困惑
    【解决方案2】:

    您可以使用beginadvance 获得第一个迭代器,无论您需要多少:

    vector<int> sub(advance(begin(miro), 100),
                    advance(begin(miro), 250));
    

    【讨论】:

    • +1 用于使用begin/advance 而不是旧的vector::begin/vector::operator+
    【解决方案3】:

    std::vector 有一个带有两个迭代器的构造函数,因此您可以指定要复制的范围:

    std::vector<std::string> v1;
    std::vector<std::string>::const_iterator first = v1.begin() + 100;
    std::vector<std::string>::const_iterator last = v1.begin() + 250;
    std::vector<std::string> v2(first, last)
    

    这将构造v2,使其包含从v1.begin()+100v1.begin()+250 之前的所有元素的副本。

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 2018-10-02
      • 2010-12-15
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多