Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   std::vector question (http://www.velocityreviews.com/forums/t287814-std-vector-question.html)

Hamish 12-29-2004 02:28 AM

std::vector question
 
I havea program which on execution gives unpredictable behaviour (it
shouldn't). In trying to track down the problem, I'm wondering if there is a
difference between these two ways of filling a std::vector with data:

Method 1:

std::vector<int> v;
int k;

for(i=0;i<n;i++){
k = i + 3;
v.push_back(k);
}

Method 2:

std::vector<int> v;

for(i=0;i<n;i++){
int k = i + 3;
v.push_back(k);
}



Victor Bazarov 12-29-2004 02:58 AM

Re: std::vector question
 
"Hamish" <h.dean@xtra.co.nz> wrote...
>I havea program which on execution gives unpredictable behaviour (it
> shouldn't). In trying to track down the problem, I'm wondering if there is
> a
> difference between these two ways of filling a std::vector with data:
>
> Method 1:
>
> std::vector<int> v;
> int k;
>
> for(i=0;i<n;i++){
> k = i + 3;
> v.push_back(k);
> }
>
> Method 2:
>
> std::vector<int> v;
>
> for(i=0;i<n;i++){
> int k = i + 3;
> v.push_back(k);
> }
>
>


No, in this particular case there is no difference. However, something
tells me that your real code, the code that gives you trouble, is a bit
more complicated than that.

It is often important to follow certain rules in your programming. For
example, the famous "Rule of Three" (look it up). If your class has
some kind of dynamic memory management, you simply _must_ follow it.

V



Chris Theis 12-29-2004 09:57 AM

Re: std::vector question
 

"Hamish" <h.dean@xtra.co.nz> wrote in message
news:oDoAd.3372$mo2.171844@news.xtra.co.nz...
> I havea program which on execution gives unpredictable behaviour (it
> shouldn't). In trying to track down the problem, I'm wondering if there is

a
> difference between these two ways of filling a std::vector with data:
>
> Method 1:
>
> std::vector<int> v;
> int k;
>
> for(i=0;i<n;i++){
> k = i + 3;
> v.push_back(k);
> }
>
> Method 2:
>
> std::vector<int> v;
>
> for(i=0;i<n;i++){
> int k = i + 3;
> v.push_back(k);
> }
>


The only difference with these two methods is the scope of k but this
doesnīt affect the behavior in this case. Please post your real code which
gives you trouble.

Cheers
Chris



KPB 12-29-2004 01:22 PM

Re: std::vector question
 
Victor Bazarov wrote:

> It is often important to follow certain rules in your programming. For
> example, the famous "Rule of Three" (look it up).


I'm actually interested in what this "rule of three" says but I'm
getting lots of irrelevant hits on google. It seems that everybody has
some "rule of three".

Any hints?

Thanks,
KPB





Jeff Flinn 12-29-2004 01:29 PM

Re: std::vector question
 
KPB wrote:
> Victor Bazarov wrote:
>
>> It is often important to follow certain rules in your programming.
>> For example, the famous "Rule of Three" (look it up).

>
> I'm actually interested in what this "rule of three" says but I'm
> getting lots of irrelevant hits on google. It seems that everybody has
> some "rule of three".
>
> Any hints?


Googling 101: What language are you discussing? Add that to your search
string.

Jeff



KPB 12-29-2004 01:31 PM

Re: std::vector question
 
Jeff Flinn wrote:

> Googling 101: What language are you discussing? Add that to your search
> string.


Please don't treat me like I'm an idiot. I'm not.

Thanks,
KPB

KPB 12-29-2004 01:37 PM

Re: std::vector question
 
KPB wrote:
> Victor Bazarov wrote:
>
>> It is often important to follow certain rules in your programming. For
>> example, the famous "Rule of Three" (look it up).

>
>
> I'm actually interested in what this "rule of three" says but I'm
> getting lots of irrelevant hits on google. It seems that everybody has
> some "rule of three".
>
> Any hints?
>
> Thanks,
> KPB
>
>
>
>


Nevermind Victor. I found them. I alredy know them. I don't think Scott
Meyers refered to this as the "rule of three" but he did stress this
nonetheless in his Effective C++ books.

KPB

Hamish 12-30-2004 04:57 AM

Re: std::vector question
 
> > I havea program which on execution gives unpredictable behaviour (it
> > shouldn't). In trying to track down the problem, I'm wondering if there

is
> a
> > difference between these two ways of filling a std::vector with data:
> >
> > Method 1:
> >
> > std::vector<int> v;
> > int k;
> >
> > for(i=0;i<n;i++){
> > k = i + 3;
> > v.push_back(k);
> > }
> >
> > Method 2:
> >
> > std::vector<int> v;
> >
> > for(i=0;i<n;i++){
> > int k = i + 3;
> > v.push_back(k);
> > }
> >

>
> The only difference with these two methods is the scope of k but this
> doesnīt affect the behavior in this case. Please post your real code which
> gives you trouble.


I haven't been able to track down the problem yet. However, the only
difference between an older version which worked, adn this version is the
following data structures:

std::vector<PolyTypeClass*> PolyTypes;

class PolyTypeClass{
public:
PolyTypeClass();
virtual ~PolyTypeClass();

const PolyTypeClass& operator= (const PolyTypeClass& poly);
void Copy(PolyTypeClass * pCopy);

int ID;
std::vector<BasePolygonClass> Rot;
};

class BasePolygonClass{
public:
BasePolygonClass();
BasePolygonClass(int Size);
virtual ~BasePolygonClass();

const BasePolygonClass& operator= (const BasePolygonClass& poly);
void Copy(BasePolygonClass * pCopy);

std::vector<PointPropClass> Points;
double Area;
double Length;
double Height;
BOOL IsConvex;
double Angle;
BOOL XFlip;
BOOL YFlip;
};

class PointPropClass
{
public:
PointPropClass();
virtual ~PointPropClass();
const PointPropClass& operator= (const PointPropClass& poly);
void Copy(PointPropClass * pCopy);

BOOL TP;
double Angle;
int Num;
int CavNum;
int St;
int Fin;
int Type;
BOOL Neg;
BOOL IsGhosh;
double x;
double y;
};



Chris Theis 12-30-2004 08:28 AM

Re: std::vector question
 

"Hamish" <h.dean@xtra.co.nz> wrote in message
news:PULAd.3637$mo2.201785@news.xtra.co.nz...
> > > I havea program which on execution gives unpredictable behaviour (it
> > > shouldn't). In trying to track down the problem, I'm wondering if

there
> is
> > a
> > > difference between these two ways of filling a std::vector with data:
> > >
> > > Method 1:
> > >
> > > std::vector<int> v;
> > > int k;
> > >
> > > for(i=0;i<n;i++){
> > > k = i + 3;
> > > v.push_back(k);
> > > }
> > >
> > > Method 2:
> > >
> > > std::vector<int> v;
> > >
> > > for(i=0;i<n;i++){
> > > int k = i + 3;
> > > v.push_back(k);
> > > }
> > >

> >
> > The only difference with these two methods is the scope of k but this
> > doesnīt affect the behavior in this case. Please post your real code

which
> > gives you trouble.

>
> I haven't been able to track down the problem yet. However, the only
> difference between an older version which worked, adn this version is the
> following data structures:
>
> std::vector<PolyTypeClass*> PolyTypes;
>
> class PolyTypeClass{
> public:
> PolyTypeClass();
> virtual ~PolyTypeClass();
>
> const PolyTypeClass& operator= (const PolyTypeClass& poly);
> void Copy(PolyTypeClass * pCopy);
>
> int ID;
> std::vector<BasePolygonClass> Rot;
> };
>
> class BasePolygonClass{
> public:
> BasePolygonClass();
> BasePolygonClass(int Size);
> virtual ~BasePolygonClass();
>
> const BasePolygonClass& operator= (const BasePolygonClass& poly);
> void Copy(BasePolygonClass * pCopy);
>
> std::vector<PointPropClass> Points;
> double Area;
> double Length;
> double Height;
> BOOL IsConvex;
> double Angle;
> BOOL XFlip;
> BOOL YFlip;
> };
>
> class PointPropClass
> {
> public:
> PointPropClass();
> virtual ~PointPropClass();
> const PointPropClass& operator= (const PointPropClass& poly);
> void Copy(PointPropClass * pCopy);
>
> BOOL TP;
> double Angle;
> int Num;
> int CavNum;
> int St;
> int Fin;
> int Type;
> BOOL Neg;
> BOOL IsGhosh;
> double x;
> double y;
> };
>


What strikes me (although in this case it should not pose a problem after a
quick glance at your code) is that you do supply a dtor and an assignment op
but not a copy ctor. If you really need a dtor & an assignment op itīs good
practice to supply a copy ctor too.

If you could please post the actual code of "Method 1" & "Method 2" which
works with your data structures and also the implementation of the Copy()
method would be interesting.

Cheers
Chris




All times are GMT. The time now is 07:57 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57