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 回答