![](/img/trans.png)
[英]Why does std::nth_element return sorted vectors for input vectors with N < 33 elements?
[英]Why does this class return length 33 while that is not is not true?
目前我正在学习类和构造函数。 昨天我上传了几乎相同的代码,但有一个不同的问题。 我需要了解有关委派的一些信息。
在我的代码中,发生了 2 件非常奇怪的事情。 在主块中,我创建了 object x,它是容器 class 的一部分。 当我尝试 output 时,我得到的长度为输出 33,这当然不是真的或至少不是有意的。
也许我应该为此开始另一篇文章,但它可能高度相关。 我还主要写了:
Container x1 = x;
std::cout << x1.GetData()[2] << std::endl;
std::cout << x1.GetLenght() << std::endl;
我试图将 x 复制到 x1。 当我 do.GetData() 它显示非常小的值(我认为机器错误),因此这表明复制失败,但是当我尝试获取长度时,初始错误 output 为 33。
这可能有点混乱,但由于covid,我无法询问课程讲师。 任何要考虑的反馈或材料将不胜感激。
问题:
为什么我得到 output object x(和间接 x1)的长度为 33?
为什么 deepcopy 无法复制元素?
代码:
Class:
class Container
{
public: //[DO NOT MODIFY/REMOVE THESE GETTERS AND SETTERS: THEY ARE USED IN THE SPECTEST]
int GetLength() const {return length;}
double* GetData() const {return data;}
void SetLength(const int length) {this->length = length;}
void SetData(double* data) {this->data = data;}
public:
// constructors
Container(){
length = 0;
data = nullptr;
}
Container(int len){
int length = len;
data = new double[length];
}
Container(std::initializer_list<double> il): Container(il.size())
{
std::copy(il.begin(), il.end(), data);
}
Container(const Container& other) : Container(other.length)
{
for (auto i=0; i<other.length; i++){
data[i] = other.data[i];
}
}
// destructor
~Container()
{
delete[] data;
length = 0;
}
// operators
void print(const std::string& info) const
{
// print the address of this instance, the attributes `length` and
// `data` and the `info` string
std::cout << " " << this << " " << length << " " << data << " "
<< info << std::endl;
}
private:
int length;
double* data;
};
主要的:
int main()
{
Container x({1,2,4,5});
std::cout << "x has address " << &x << std::endl;
Container x1 = x;
std::cout << x1.GetData()[2] << std::endl;
return 0;
}
int length = len;
不修改成员,但创建一个局部变量。 它应该是:
length = len;
或者更好,使用初始化列表:
Container(int len) :
length{len},
data{new double[length]}
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.