如何拥有一个带有类元素的向量,其中一些元素分配了构造函数参数
How to have a vector with class elements, some of them with constructor argument assigned?
我想要这样的东西,或者更确切地说,有一个包含类元素的向量,并更改其中一些赋值构造函数的参数:
#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=
将做正确的事情,我只是想提醒注意,在某些情况下需要这样做
相关文章:
- 访问动态分配列表中的元素
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 是否有具有外部元素分配的序列容器(在 STL 中)?
- C++ 将元素分配给映射值时访问错误
- 如何通过查找迭代器结果分配给一组对的元素
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 在 CPP 中将元素分配给矢量
- 如何将元素分配给向量?
- 并行算法将向量的元素分配到另一个元素的元素
- 无法在重载运算符时将数组元素分配给类变量"="
- 将字符串元素分配给结构数组中的结构
- 为每个循环中的std :: vector的当前元素分配迭代器
- OpenCV:为矩阵元素分配新值
- 将矢量元素分配给字符变量
- 如何拥有一个带有类元素的向量,其中一些元素分配了构造函数参数
- 为什么std::deque在默认构造函数中为它的元素分配内存?
- C++将字符串的元素分配给一个新字符串