c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector(357): error C2664: 'std::vector<_Ty>::_Construct_n' : cannot convert parameter 2 from 'int' to 'const std::vector<_Ty> &'
with
[
_Ty=std::vector<int>
]
and
[
_Ty=int
]
Originally posted by AfricanDude
How do I populate a 3-d stl vector using a for statement?
thank you
I don't know exactly what you mean. You mean this?
Code:
Int3D My3DArray(10, Int2D(10, Int1D(10,0)));
int size1 = My3DArray.size();
for ( int i = 0; i < size1; ++i )
{
int size2 = My3DArray[i].size();
for (int j = 0; j < size2; ++j )
{
int size3 = My3DArray[i][j].size();
for ( k = 0; k < size3; ++k )
MyArray[i][j][k] = 15;
}
}
If you are talking about how do you size each of the dimensions, then that is a different question.
Hello:
I have this interesting problem...
I have to use a c-library that contains a function that is defined as follow:
int func(char * cpData);
I have been using a structure accually a nested structure as follows
struct A
{
char cString;
char cAnotherstring;
}sA;
struct B
{
int iIndex;
float fData[MAXDATA];
}sB;
struct C
{
struct A nA;
struct B nB[8];
}sStream;
I can call this structure with now problems
using
func((char *) &sStream);
The problem happenes when
I wanted to use a vector for the float fData
such as the struct B is as follows:
struct B
{
int iIndex;
vector< float> fData;
} sB;
when I call the function I getting garbaged data.
I do take care of the reserving the appropriate data size for the vector
In fact I can see the data correctly at a point before I used this legecy
function.
Is there a way I can convert somehow to c-array which the function understand
but be able to use the advantage of the vector.
So basically you need to serialize the data stored in the vector? That won't happen though a cast to char*. All that gives you is the memory-layout of the vector class itself, not the data it is storing. The same thing would happen if you had c-style strings (char*) in your structs. You would see the pointer, but not the string it is pointing to.
One solution to this is to implement operator >> and << for your structs to enable serialization to a std::ostream. (Or maybe your own serializer class.) Casting pointers like you do now, is something you really, really should not do if you aren't fully aware of the consequences.
Displaying a 3-dimensional vector on a 2-dimensional monitor is intrinsically difficult, so I would suggest using a 3D graphic library like OpenGL to display it.
But that's just me...
More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity. --W.A.Wulf
Premature optimization is the root of all evil --Donald E. Knuth
Displaying a 3-dimensional vector on a 2-dimensional monitor is intrinsically difficult, so I would suggest using a 3D graphic library like OpenGL to display it.
But that's just me...
Yeah, thats what we are trying to do actually, were using glut and C++
i think how were gonna manage xyz is a single vector for x, single for y and single for z, just to keep it uncomplicated, then the vertex number would just be associated with the position [i] for any info.
>> is interpreted by the compiler as the right shift operator.
Not necessarily. As with VC 2005, it works! Compiler is smart enough to understand the difference. Yeah, to be on safer side, we should use space in between...
Bookmarks