This works for me
#include <vector>
#include <string>
using namespace std;
typedef std::vector<string> String1D;
typedef std::vector<String1D> String2D;
typedef std::vector<String2D> String3D;
int main()
{
String3D vector1;
String3D::iterator OneDStart = vector1.begin();
String3D::iterator OneDEnd = vector1.end();
for ( ; OneDStart != OneDEnd; OneDStart++ )
{ //1D
String2D::iterator TwoDStart = OneDStart->begin();
String2D::iterator TwoDEnd = OneDStart->end();
for ( ; TwoDStart != TwoDEnd; TwoDStart++ )
{ //2D
String1D::iterator ThreeDStart = TwoDStart->begin();
String1D::iterator ThreeDEnd = TwoDEnd->end();
for ( ; ThreeDStart != ThreeDEnd; ThreeDStart++ )
{ //3D
} //1D
} //2D
} //3D
}
Ancient Dragon
Retired & Loving It
30,043 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,341
If you want a real 3D array C++ surrogate then try indicies, not iterators:
// int base for simplicity
typedef std::vector<int> int1D;
typedef std::vector<int1D> int2D;
typedef std::vector<int2D> int3D;
int main()
{
int dim = 3;
int3D v;
// initiate the cube so v[i][j][k] == ijk...
v.resize(dim);
for (int i = 0; i < (int)v.size(); ++i)
{
v[i].resize(dim);
for (int j = 0; j < (int)v[i].size(); ++j)
{
v[i][j].resize(dim);
for (int k = 0; k < (int)v[i][j].size(); ++k)
v[i][j][k] = (i+1)*100+(j+1)*10+(k+1);
}
}
// print plane by plane then modify cube elements
for (int i = 0; i < (int)v.size(); ++i)
{
cout << i << ":\n"; // i-th plane
for (int j = 0; j < (int)v.size(); ++j)
{
for (int k = 0; k < (int)v.size(); ++k)
{
cout << '\t' << v[i][j][k];
v[i][j][k] = 1; // why? See below
}
cout << "\n";
}
}
cout << endl;
// calculate sum of elements i*j*k*1 then go to Fortran...
int sum = 0;
for (size_t i = 0; i < v.size(); ++i)
for (size_t j = 0; j < v[i].size(); ++j)
for (size_t k = 0; k < v[i][j].size(); ++k)
sum += v[i][j][k];
// must be 3*3*3 == 27...
cout << "Sum(v): " << sum << endl;
return 0;
}
ArkM
Postaholic
2,001 posts since Jul 2008
Reputation Points: 1,234
Solved Threads: 348
Apropos, dont tread on typedefs: they never create new types, they are type aliases only...
ArkM
Postaholic
2,001 posts since Jul 2008
Reputation Points: 1,234
Solved Threads: 348