【问题标题】:Why doesn't this function of my class work? [duplicate]为什么我班的这个功能不起作用? [复制]
【发布时间】:2021-06-03 17:03:05
【问题描述】:

我已经尝试了 4 个小时来解决这个问题。我就是找不到它,我放弃了。我必须创建一个类,在其中将大数的数字存储在向量中。而且我还必须为它们创建函数。其中之一是用于乘法。我知道这不是你如何乘以一个大数,这只是它的一个测试功能。但它不起作用。它不会给出错误,程序只是等待一段时间,然后什么都不打印(我在 main 中打印它)。我已经创建了很多次类,并且它们有效,并且它们的函数完美地返回了它们的类型。这对我有用的唯一方法是这样的:

largeNum mul(int x){
        for(int i=0; i<_numArr.size(); i++){
            _numArr[i] = _numArr[i] * x;
        }
   return *this;  
}

但我不想覆盖我的原始向量。我想将结果提供给新的 largeNum 类型对象的向量。我以各种方式尝试了它的指针,但它只是不起作用。可能是因为现在是凌晨 3 点,但我哪儿也去不了。 这就是我正在尝试的:

class largeNum{
    public:
        std::vector<int> _numArr;

    public:
        largeNum(){
            for(int i=0; i< _numArr.size(); i++){
                _numArr[i]=0;
            }
        }


    largeNum mul(int x){
        largeNum res;
        for(int i=0; i<_numArr.size(); i++){
            res._numArr[i] = _numArr[i] * x;
        }
        return res;
    }

}



/* the printing part in main.cpp:

largeNum b = n1.mul(2);
for(int i=0; i < b._numArr.size(); i++){
        cout << b._numArr[i] << endl;
}
*/

请帮忙。

【问题讨论】:

    标签: c++ c class oop vector


    【解决方案1】:

    构造函数和mul() 都没有调整目标vector 的大小。所以,因为vector 是空的,构造函数内部的循环是空操作,mul() 内部的循环具有未定义的行为,用于越界访问元素。

    试试这样的:

    class largeNum{
        public:
            std::vector<int> _numArr;
    
        public:
            largeNum() {
                // push values into the vector as needed...
                _numArr.resize(someSize, 0);
            }
    
            largeNum(const largeNum &src) : _numArr(src._numArr) {}
    
            largeNum mul(int x) const {
                largeNum res(*this);
                for(size_t i = 0; i < res._numArr.size(); ++i) {
                    res._numArr[i] *= x;
                }
                return res;
            }
    };
    

    或者:

    class largeNum{
        public:
            std::vector<int> _numArr;
    
        public:
            largeNum() {}
    
            largeNum(const largeNum &src) : _numArr(src._numArr) {}
    
            largeNum mul(int x) const {
                largeNum res;
                res.reserve(_numArr.size());
                for(size_t i = 0; i < _numArr.size(); ++i) {
                    res.push_back(_numArr[i] * x);
                }
                return res;
            }
    };
    

    【讨论】:

      【解决方案2】:

      您忘记将号码推回res

      largeNum mul(int x){
          largeNum res;
          for(int i=0; i<_numArr.size(); i++){
              if (res._numArr.size() == i) res._numArr.push_back(0);
              res._numArr[i] = _numArr[i] * x;
          }
          return res;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多