0

私はそのようなものを持ちたい、またはむしろクラスの要素を持つベクトルを持ち、それらのいくつかを変更してコンストラクタの引数を割り当てたい:

#include <vector>

class lou_reed
{
    int K;

public:
    lou_reed() {
    }

    lou_reed(int arg) : K(arg) {
    }
};


void changeEL(std::vector<lou_reed> & vec, int a, int b, int c) {
    lou_reed aus(c);
    for (int i = a; i < b; ++i) {
        vec[i] = aus;
    }
}

int main() {
    std::vector<lou_reed> velvet_underground(4);
    changeEL(velvet_underground, 2, 3, 6);
}

他のより良い解決策はありますか?

4

1 に答える 1

0

あなたの例では、次のvoid changeEL(vector <lou_reed> vec,int a,int b, int c){ように宣言する必要があります

void changeEL(vector <lou_reed>& vec,int a,int b, int c){
                               ^

それ以外の場合は、ベクターのコピーにのみ割り当てられます。


あなたが望むものを達成するにはstd::copy、から使用することができます<algorithm>

vector <lou_reed> velvet_underground;
void changeEL(vector <lou_reed>& vec,int a, int b, int c)
{
  std::vector<lou_reed> v(b-a, lou_reed(c));
  vec.copy(v.begin(), v.end(), vec[a]);
}

クラスは単純化されていると思います*ただし、場合によっては、クラスに定義された代入演算子が必要になる場合がありますlou_read

class lou_reed {
int K;
public:
lou_reed(){}

lou_reed(int arg):K(arg){
}

lou_read& operator=(const lou_read& other){
   if (this != &other){ // protect against invalid self-assignment
       K=other.K;
       //...deep copy (maybe some pointers in your class ?)
   }
 return *this;
}
};

*-David Rodriguez-dribeas がこの特定の例で気付いたようにoperator=、暗黙的に定義されたものを提供する必要はなく、正しいことを行います。これが必要な場合があることに注意してください。

于 2013-08-25T12:25:37.537 に答える