Avatar billede nak-m Nybegynder
20. september 2002 - 21:37 Der er 3 kommentarer og
1 løsning

optimer kode...

er der ikke en eller anden der kan optimere(og den slags) koden?

#include <iostream>
using namespace std;

const int DefaultSize = 10;

class Array {
  int *pType;
  int itsSize;
public:
  Array(int itsSize = DefaultSize);
  Array(const Array &rhs);
  ~Array() { delete [] pType; }
  Array& operator=(const Array&);
  int& operator[](int offSet);
  const int& operator[](int offSet) const;
  int GetitsSize() const { return itsSize; }
  friend ostream& operator<< (ostream&, const Array&);
  class xBoundary {};
};

Array::Array(int size): itsSize(size)
{
  pType = new int[size];
  for(int i = 0; i < size; i++) pType[i] = 0;
}

Array& Array::operator=(const Array &rhs)
{
  if(this == &rhs) return *this;
  delete [] pType;
  itsSize = rhs.GetitsSize();
  pType = new int[itsSize];
  for(int i = 0; i < itsSize; i++) pType[i] = rhs[i];
  return *this;
}

Array::Array(const Array &rhs)
{
  itsSize = rhs.GetitsSize();
  pType = new int[itsSize];
  for(int i = 0; i < itsSize; i++) pType[i] = rhs[i];

}

int& Array::operator[](int offset)
{
  int size = GetitsSize();
  if(offset >= 0 && offset < GetitsSize()) return pType[offset];
  throw xBoundary();
  return pType[0];
}

const int& Array::operator[](int offset) const
{
  int mysize = GetitsSize();
  if(offset >= 0 && offset < GetitsSize()) return pType[offset];
  throw xBoundary();
  return pType[0];
}

ostream& operator<< (ostream& output, const Array& theArray)
{
  for(int i = 0; i < theArray.GetitsSize(); i++) output << "[" << i << "] " << theArray[i] << endl;
  return output;
}

int main()
{
  Array intArray(20);
  try
  {
    for(int j = 0; j < 100; j++)
    {
      intArray[j] = j;
      cout << "intArray[" << j << "] ok!" << endl;
    }
  }
  catch(Array::xBoundary)
  {
    cout << "...SCHH!\n";
  }
  cout << "Done.\n";
  return 0;
}

nu!
Avatar billede mickni33 Nybegynder
21. september 2002 - 13:43 #1
hvorfor vil du have det optimeret ??
Hvis det virker er det OK.
Programmet er ikke så langt at det betyder noget hvis det bliver optimeret en smule :-)
Avatar billede nak-m Nybegynder
21. september 2002 - 18:36 #2
nej det ved jeg skam godt...vil bare lige se lidt på en forbedret version af det dú!
Avatar billede nak-m Nybegynder
21. september 2002 - 19:14 #3
nå men jeg lukker! :o)
Avatar billede soepro Nybegynder
25. september 2002 - 14:39 #4
Jeg ser kun een mulig optimering, nemlig omkring den overloaded = operator og din Array constructor:

Array& Array::operator=(const Array &rhs)
{
  if(this == &rhs) return *this;
  delete [] pType;
  // Brug overloadede constructor
  Array(rhs);
  return *this;
}

Array::Array(const Array &rhs)
{
  itsSize = rhs.GetitsSize();
  pType = new int[itsSize];
  for(int i = 0; i < itsSize; i++) pType[i] = rhs[i];
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester