如何拥有一个带有类元素的向量,其中一些元素分配了构造函数参数

How to have a vector with class elements, some of them with constructor argument assigned?

本文关键字:元素 分配 参数 构造函数 向量 有一个 何拥      更新时间:2023-10-16

我想要这样的东西,或者更确切地说,有一个包含类元素的向量,并更改其中一些赋值构造函数的参数:

#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);
}

还有其他更好的解决方案吗?

在您的

示例中void changeEL(vector <lou_reed> vec,int a,int b, int c){应声明为

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

否则,您只会分配给向量的副本。


要实现您想要的,您可以使用<algorithm>中的std::copy

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=将做正确的事情,我只是想提醒注意,在某些情况下需要这样做