我如何在一个类中确定向量的大小?C ++ oop问题

问题描述 投票:-5回答:1
#include <iostream>
using namespace std;

class vector{
    private:
        int *arr;
        int n;

    public:
        vector(int a, int n){
            for(int i = 1; i <= n; i ++)
                arr[i] = a;
        }

        vector(){
            for(int i = 1; i <= n; i ++)
                arr[i] = 0;
        }

        void reactualizare_vector(int t, int m){
            n = t;
            for(int i = 1; i <= n; i ++)
                arr[i] = m;
        }

        void afis_vector(){
            for(int i = 1; i <= n; i ++)
                cout << arr[i] << " ";
        }

        void citire_vector(int n){
            for(int i = 1; i <= n; i ++)
                cin >> arr[i];
        }
};

int a, n, t, m;

int main()
{
    cin >> a >> n;

    vector p(a, n);
    p.citire_vector(n);
    p.afis_vector();

    return 0;
}

输入:2 4 2 1 4 3

输出:2 1 4 3 0 0 0 0 1952810132 2543616 1952810096 -594764666 6422492 2002010568 2543616 -1294838125 0 0 2543616 0 0 0 0 -1294838125 6422432 0 6422500 2002070528 -974236977 0 6422508 2002010520 -1 2002121555 0 0 4199136 2543616 0

我如何确定向量的大小以不显示2 1 4 3之后的内容?

c++ oop vector constructor size
1个回答
0
投票

编码样式(变量命名等)非常重要。我强烈建议学习这些(在上面的评论中提到),但是我认为其他人对此问题了解得更多。我本人不认为我有良好的编码风格来提供有用的建议……我只是跳到可能至少会使您的代码正常工作的地方。

1)类向量中的n未正确分配。您将n输入作为全局变量,但实际上并没有进入该类。您需要分配p.n = n;之类的值,但是由于向量类中的n是私有的,因此您可以尝试编写函数来做到这一点。一种方法可能是将初始化程序修改为

vector(int a, int sz){
    n = sz;
    for(int i = 1; i <= n; i ++)
        arr[i] = a;
}

但是,我认为编写一个调整大小的函数通常是一个更好的主意。

在某些编译器和设置中,应用此功能可使您的代码正常工作。

2)如前所述,您实际上应该分配指针arr。我不知道为什么您忽略arr中的索引0,但是如果愿意,您可以在初始化步骤中为(n+1) * sizeof(int)分配arr字节的内存。这样的事情可能会起作用。

vector(int a, int sz){
    n = sz;
    arr = (int *)(malloc((n+1)*sizeof(int)));
    for(int i = 1; i <= n; i ++)
        arr[i] = a;
}

3)如果必须编写向量类,则无关紧要。但是,如果没有特别要求您编写此类,并且您还有要做的重要工作,请使用std :: vector。即使在将我的修复程序应用于代码之后,std :: vector也提供了更好的性能和大量有用的功能,并且如果必须编写整个vector类,您很可能会出错并花费数小时的调试时间。避免重新发明轮子。


显然,这里写的有关内存分配的一切现在看来都是错误的。我对现代C ++内存分配一无所知。请忽略这些,并且由于我不知道如何删除已接受的答案,因此如果有人可以删除此答案。抱歉,信息过时。


-4
投票

感谢您,这里没有人真正帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.