提问人:Jacob 提问时间:4/16/2023 更新时间:4/16/2023 访问量:44
为什么复制分配push_back元素到现有对象?
Why the copy assignment push_back element to the existing object?
问:
我创建了一个名为 Sentence 的类:
class
Sentence {
public:
vector<Clause> Clause_arr;
Sentence() {};
Sentence(const Sentence& s) {
for(int i = 0; i < s.Clause_arr.size(); i++) {
Clause_arr.push_back(s.Clause_arr[i]);
}
}
Sentence& operator = (const Sentence& s) {
for(int i = 0; i<s.Clause_arr.size(); i++) {
Clause c = s.Clause_arr[i];
Clause_arr.push_back(c);
}
return *this;
}
Sentence(vector<Clause> a) {Clause_arr = a;}
Sentence operator +(const Sentence& x) {
if(x.Clause_arr.size() == 0 && Clause_arr.size() == 0) {
Clause x;
Sentence ans;
ans.Clause_arr.push_back(x);
return ans;
}
vector<Clause> a={};
a.insert(a.end(),Clause_arr.begin(),Clause_arr.end());
a.insert(a.end(),x.Clause_arr.begin(),x.Clause_arr.end());
Sentence ans(a);
return ans;
}
bool operator ==(const Sentence& x) const {
if(x.Clause_arr.size() != Clause_arr.size()) return false;
for(int i = 0; i < x.Clause_arr.size(); i++) {
if(x.Clause_arr[i] != Clause_arr[i]) return false;
}
return true;
}
bool operator !=(const Sentence& x) const {
return (*this != x);
}
};
我创建了句子 a 和句子 b,但是当我执行 a = b 时,我发现它正好给了我 a + b 的结果
我想知道如何更改我的代码以准确实现复制分配。我是否需要更改构造函数或复制赋值函数?
答:
0赞
Chris
4/16/2023
#1
听起来您需要先清除实例中实例变量中的内容,然后再将同一实例变量的内容推回 。Clause_arr
a
b
Sentence& operator = (const Sentence& s) {
Clause_arr.clear();
for(int i = 0; i<s.Clause_arr.size(); i++) {
Clause c = s.Clause_arr[i];
Clause_arr.push_back(c);
}
return *this;
}
您也可以使用基于范围的 for 循环。
Sentence& operator = (const Sentence& s) {
Clause_arr.clear();
for (auto c : s.Clause_arr) {
Clause_arr.push_back(c);
}
return *this;
}
评论
main
this->Clause_arr
operator=
operator=
operator==
return Clause_arr == x.Clause_arr;
operator+