# vecteur.size() en C++



## sambocuccio (22 Avril 2006)

Bonjour,
J'obtiens un résultat curieux dans l'utilisation d'un vecteur.
Voici le listing et le résultat.
Merci  pour une éventuelle réponse.

#include <iostream>
#include <vector>
using namespace std;

class Suite
{
	int t[];
	vector<int> v;

public:
	Suite();
	~Suite();
	vector<int> get_v();
	void affiche(vector<int>);
};
------------------------------------------
#include "Suite.h"

Suite::Suite()
{ 
	int t[] = {1,2,3};
	vector<int> v(t,t+3);
}

Suite::~Suite()
{
}

vector<int> Suite::get_v()
{
	return v;
}

void Suite::affiche(vector<int> v)
{
	cout << "taille de v = " << v.size();
	cout << "\n";
	cout << "v[0] = " << v[0];
	cout << "\n";
	cout << "v[1] = " << v[1];
	cout << "\n";
	cout << "v[2] = " << v[2];
	cout << "\n";
}
-----------------------------------------------------
#include "Suite.h"

int main (int argc, char * const argv[]) 
{
	Suite s;
	s.affiche(s.get_v());
}

Et voici le résultat très curieux (vecteur de taille nulle et contenant trois éléments !?). Ou est la faute ?

[Session started at 2006-04-22 12:44:18 +0200.]
taille de v = 0
v[0] = 1
v[1] = 2
v[2] = 3

test has exited with status 0.


----------



## canari (22 Avril 2006)

je ne suis pas un expert du c++, mais voici ma contribution 
int t[] ne sert à rien dans la classe
et dans le constructeur:
vector<int> v2 ( t, t + (sizeof(t) / sizeof(int)) );
v = v2;
peut-être pas la solution la plus propre, mais ça donne bien
taille de v = 3
v[0] = 1
v[1] = 2
v[2] = 3
le poblème étant que dans le constructeur, tu redéfinis un vecteur, donc autre que celui de la classe.
je ne saurais t'expliquer pourquoi ça affiche bien les 3 valeurs dans ton cas.


----------



## canari (22 Avril 2006)

une autre solution qui me semble plus propre

```
template <class T, size_t N>
vector<T> fillVector(T (&arr)[N])
{
  return vector<T>(arr, arr+N);

}

Suite::Suite()
{
int t[] = {1,2,3};
v = fillVector( t );
}
```


----------



## ntx (22 Avril 2006)

sambocuccio a dit:
			
		

> Suite::Suite()
> {
> int t[] = {1,2,3};
> vector<int> v(t,t+3);
> }


Le constructeur n'est pas bon : il ne faut pas redéclarer les membres de ta classe :

```
Suite::Suite()
{ 
	int tab[] = {1,2,3};
	v = vector<int>(tab,tab+3);
}
```


----------



## canari (22 Avril 2006)

bon, dernière réponse de ma part 

```
Suite::Suite()
{
    int t[] = {1,2,3};
    v = vector<int>( t, t+(sizeof(t)/sizeof(int)) );
}

void Suite::affiche(vector<int> v)
{
    cout << "taille de v = " << v.size() << endl;
    for ( unsigned int i = 0; i < v.size(); i++ )
    {
        cout << "v[" << i << "] = " << v[i] << endl;
    }
}
```


----------



## sambocuccio (22 Avril 2006)

Merci à tous !


----------

