3

いくつかの値を持つベクトルがあります。それを別のベクトルにコピーするにはどうすればよいですか?特定の値 (位置にあるx-xもちろんパラメータになります) 以外のすべての値がコピーされますか?

さらに、場所からの値を別の目的で使用したいxので、保存することをお勧めします。

それを行う簡単な方法はありますか?

4

3 に答える 3

3

特定の値を除いて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それに応じて述語のロジックを使用および調整できます。

于 2013-11-06T09:09:23.110 に答える
1

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は、ランダム アクセス イテレータがあるため機能します。

于 2013-11-06T09:18:51.830 に答える
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;
}

2番目の質問では、ベクトル内の要素のインデックスを決定します

 // 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;
于 2013-11-06T09:16:34.263 に答える