如何复制除一个特定元素之外的向量?

时间:2013-11-06 09:04:59

标签: c++ vector stl

我有一个带有一些值的向量。如何将其复制到另一个向量,所以除了特定的值(位于x - x位置的所有值都将是一个参数)将被复制?

此外,我想将位置x中的值用于其他内容,因此我更喜欢将其保存。

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:2)

  

如何复制除一个特定值之外的stl向量?

您可以使用std::copy_if

std::vector<T> v = ....;
std::vector<T> out;
T x = someValue;
std::copy_if(v.begin(), v.end(), std::back_inserter(out), 
             [x](const T& t) { return t != x; });

如果您没有C ++ 11支持,可以使用std::remove_copy_if并相应地调整谓词的逻辑。

答案 1 :(得分:2)

如果你有c ++ 11,请使用std::copy_if,否则:

void foo(int n) {
    std::vector<int> in;
    std::vector<int> out;

    std::copy(in.begin(), in.begin() + n, out.end());
    std::copy(in.begin() + n + 1, in.end(), out.end());
}

这是有效的,因为std::vector具有随机访问迭代器。

答案 2 :(得分:1)

正如Luchian建议的那样,你应该使用erase()

#include <vector>
#include <iostream>
#include<algorithm>

int main(){

    std::vector<int> vec1;
    vec1.push_back(3);
    vec1.push_back(4); // X in your question
    vec1.push_back(5);

    std::vector<int> new_vec;
    new_vec = vec1;

    new_vec.erase(std::find(new_vec.begin(),new_vec.end(),4));

    for (unsigned int i(0); i < new_vec.size(); ++i)
        std::cout << new_vec[i] << std::endl;

    return 0;
}

并且对于第二个问题,确定向量中元素的索引

 // determine the index of 4 ( in your case X)
 std::vector<int>::iterator it;
 it = find(vec1.begin(), vec1.end(), 4);
 std::cout << "position of 4: " << distance(vec1.begin(),it) << std::endl;