Connecting Tech Pros Worldwide Help | Site Map

How to initialize array which is a member of a class?

  #1  
Old December 7th, 2006, 01:35 AM
heng
Guest
 
Posts: n/a
If the data member of a class is an array, how to initialize?

I tried the following, but it is wrong.

class A
{
public:
int a[3];
A():a({0,0,0}){}
};

Thanks for your kind help !

  #2  
Old December 7th, 2006, 02:25 AM
Alf P. Steinbach
Guest
 
Posts: n/a

re: How to initialize array which is a member of a class?


* heng:
Quote:
If the data member of a class is an array, how to initialize?
>
I tried the following, but it is wrong.
>
class A
{
public:
int a[3];
A():a({0,0,0}){}
};
If you just want to default-initialize (all zeroes for the above),

A(): a() {}

However, old versions of Visual C++ don't support that.

A better way is to use a std::vector,

struct A
{
std::vector<inta;
A(): a(3) {}
};

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
  #3  
Old December 7th, 2006, 05:35 AM
Salt_Peter
Guest
 
Posts: n/a

re: How to initialize array which is a member of a class?



heng wrote:
Quote:
If the data member of a class is an array, how to initialize?
>
I tried the following, but it is wrong.
>
class A
{
public:
int a[3];
A():a({0,0,0}){}
};
>
Thanks for your kind help !
Use a std::vector instead. Better yet, use a templated class with a
std::vector member.
That way you can store anything and you'll learn something about the
vector's interface.

#include <iostream>
#include <ostream>
#include <vector>
#include <list>
#include <string>
#include <iterator>

template< typename T >
class V {
std::vector< T vt; // private member vector
public:
V(size_t sz = 0, const T& t = T())
: vt(sz, t) { }
V(const V& copy)
{
vt = copy.vt;
}
/* size_type */
typedef typename std::vector< T >::size_type
size_type;
/* member functions */
void push_back(const T& t)
{
vt.push_back( t );
}
T& at(size_type idx)
{
return vt.at(idx);
}
T& operator[] (size_type idx)
{
return vt[idx];
}
size_type size() const { return vt.size(); }
/* iteration */
typedef typename std::vector< T >::const_iterator
const_iterator;
typedef typename std::vector< T >::iterator
iterator;
iterator begin() { return vt.begin(); }
const_iterator begin() const { return vt.begin(); }
iterator end() { return vt.end(); }
const_iterator end() const { return vt.end(); }
/* friend op */
friend std::ostream&
operator<<(std::ostream& os, const V& r_v)
{
std::copy( r_v.begin(),
--r_v.end(),
std::ostream_iterator< T >(os, ", ") );
return os << *(--r_v.end());
}
};

int main()
{
V< std::string vs;
vs.push_back( "string 0" );
vs.push_back( "string 1" );
vs.push_back( "string 2" );
std::cout << "vs.size() = ";
std::cout << vs.size() << std::endl;
std::cout << vs << std::endl;

V< double v(5, 1.1);
std::cout << "v.size() = ";
std::cout << v.size() << std::endl;
std::cout << v << std::endl;

V< double another(v);
another.push_back( 2.2 );
another.push_back( 3.3 );
std::cout << "another.size() = ";
std::cout << another.size() << std::endl;
std::cout << another << std::endl;

std::list< double dlist(another.begin(), another.end());
std::cout << "dlist.size() = ";
std::cout << dlist.size() << std::endl;
std::copy( dlist.begin(),
dlist.end(),
std::ostream_iterator< double >(std::cout, "\n") );
}

/*
vs.size() = 3
string 0, string 1, string 2
v.size() = 5
1.1, 1.1, 1.1, 1.1, 1.1
another.size() = 7
1.1, 1.1, 1.1, 1.1, 1.1, 2.2, 3.3
dlist.size() = 7
1.1
1.1
1.1
1.1
1.1
2.2
3.3
*/

Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to initialize array? toton answers 18 August 1st, 2006 06:35 PM
How to initialize array in class www.brook@gmail.com answers 9 March 5th, 2006 07:45 PM
comp.lang.c Answers to Frequently Asked Questions (FAQ List) Steve Summit answers 0 November 13th, 2005 03:15 AM
How to initialize a const array class member? Fred Zwarts answers 2 July 22nd, 2005 09:23 PM