C++ 为什么可以';我不能打印向量中的元素吗?

C++ 为什么可以';我不能打印向量中的元素吗?,c++,C++,所以这可能是一个愚蠢的问题,但我在网上找不到任何解决方案 我正在读比亚恩·斯特劳斯特鲁普的《C++之旅》一书,我试着按照第2.3.2节的内容去做。 我们首先定义了一个名为Vector的类: #include <iostream> class Vector { public: Vector(int s) :elem{new double[s]}, sz{s} { } // constr uct a Vector double& oper

所以这可能是一个愚蠢的问题,但我在网上找不到任何解决方案

我正在读比亚恩·斯特劳斯特鲁普的《C++之旅》一书,我试着按照第2.3.2节的内容去做。 我们首先定义了一个名为Vector的类:

#include <iostream>

class Vector {
    public:
        Vector(int s) :elem{new double[s]}, sz{s} { } // constr uct a Vector
        double& operator[](int i) {return elem[i]; } // element access: subscripting
        int size() { return sz; }
        
    private:
        double* elem; // pointer to the elements
        int sz; // the number of elements
};
#包括
类向量{
公众:
向量(ints):elem{new double[s]},sz{s}{}//构造一个向量
double&operator[](int i){return elem[i];}//元素访问:订阅
int size(){return sz;}
私人:
double*elem;//指向元素的指针
int sz;//元素的数量
};
然后我们编写了一个read_和_sum函数:

Vector v(6); // a Vector with six elements

double read_and_sum(int s)
{
    Vector v(s); // make a vector of s elements
    for (int i=0; i<v.size(); ++i) std::cin>>v[i]; // read into elements
    double sum = 0;
    for (int i=0; i<v.size(); ++i) sum+=v[i]; // take the sum of the elements
    return sum;
}
向量v(6);//六元向量 双读和和(整数s) { 向量v(s);//生成s元素的向量 for(int i=0;i>v[i];//读入元素 双和=0;
for(inti=0;i
v
v
是两个独立的向量。现在你可能会想“哈?你不是说过两次同样的话吗?”但这正是你在代码中所做的

Vector v(6); // a Vector with six elements
在全局范围内定义一个
v
。这是您稍后尝试打印向量时在
main()
中引用的内容

double read_and_sum(int s)
{
    Vector v(s); // make a vector of s elements

read_and_sum()
函数作用域中定义
v
。这是您从
std::cin
填充的对象。您有两个不同的对象,名为
v
。一个在全局作用域中,它是您在
main
函数中使用的对象,它的“向量”未初始化。然后在
read_and_sum
函数中有另一个。小注释,但不需要写入
v.operator[](i)
,只需写入
v[i]
。这是本书中的代码?请注意,
向量
是相当不完整的。对于一个人来说,你不能复制它而不遇到很多问题!但是如果我在函数范围中定义v,我以后应该如何引用v呢?@YBCO\u David如果你在函数范围中定义
v
,它将在函数结束时被销毁(尽管任何动态分配的内存都不会。所以现在您将有内存泄漏!)您可以返回
v
的副本(在这种情况下,您需要定义并实现副本构造函数)或者只需在函数中完成所有的工作。谢谢!我必须说C++与Python .HA有很大的不同。这是肯定的。C++中为你做了很多的事情。如果你定义了一个拷贝构造函数,我建议你去看看(这也有助于防止你程序中已经存在的漏洞)。
double read_and_sum(int s)
{
    Vector v(s); // make a vector of s elements