Кто-нибудь может проверить и исправить мою проблему с вектором - PullRequest
0 голосов
/ 22 апреля 2020

Это код для печати вектора указателя в порядке убывания. В этом коде функция размера вектора не работает. Ввод long long int, поэтому я взял указатель long long int.

class Number{
  long long int *num;
  public:
  Number(long long int t);
  void largestNumber();
};

//Complete this function below
Number :: Number(long long int t){
  //Complete this function
  vector <long long int> a; 
  while(t)
  {
      a.push_back(t%10);
      t=t/10;
  }
  num=a.data();
}

void Number :: largestNumber(){
  //Complete this function
    for(long long int i=0;i<num->end();i++)
    {
        for(long long int j=1;j<num.size();j++)
        {
            if(num[i]<num[j])
            {
                int temp=num[i];
                num[i]=num[j];
                num[j]=temp;
            }

        }
        cout<<num[i];
    }
}


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    long long int num;
    cin>>num;
    Number obj(num);
    obj.largestNumber();
    return 0;
}

1 Ответ

3 голосов
/ 22 апреля 2020

Этот код неверен:

//Complete this function below
Number :: Number(long long int t){
    //Complete this function
    vector <long long int> a; 
    while(t)
    {
        a.push_back(t%10);
        t=t/10;
    }
    num=a.data();
}

Вектор a существует только в конструкторе. Когда конструктор выходит, a уничтожается. Но вы сохранили указатель на данные векторов в num, поэтому в итоге вы получите недопустимый указатель.

Вот правильный код. Как обычно, ответ: не используйте указатели .

class Number
{
    std::vector<long long int> num; // don't use pointers
public:
    Number(long long int t);
    void largestNumber();
};

Number::Number(long long int t)
{
    while (t)
    {
        num.push_back(t%10);
        t = t/10;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...