c++ mutidimentional arrays using vector


 
Thread Tools Search this Thread
Top Forums Programming c++ mutidimentional arrays using vector
# 1  
Old 04-16-2009
c++ mutidimentional arrays using vector

Hi! I need to make dynamic multidimensional arrays using the vector class. I found in this page How to dynamically create a two dimensional array? - Microsoft: Visual C++ FAQ - Tek-Tips the way to do it in 2D, and now i'm trying to expand it to 3D but i don't understand how is the operator[] working, so i have problems. Here is my code:

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

template <typename T>
class Matrix {
protected:
  std::vector<std::vector<T> > m_data;
public:
  Matrix() {}
  Matrix(int rows, int cols) : m_data(rows, std::vector<T>(cols)) {}
  ~Matrix() {}

  inline void get_size(int& rows, int& cols) {
    rows = m_data.size();
    cols = m_data[0].size(); }
  //operators
  inline std::vector<T> & operator[](int i) { return m_data[i]; }
  inline const std::vector<T> & operator[] (int i) const { return m_data[i]; }
};

template <typename T>
class MatrixTD {
protected:
  Matrix<std::vector<T> > m_data; 
  
public:
  MatrixTD() {}
  MatrixTD(int rows, int cols, int lays) : m_data(rows, cols) {
    for(int i = 0; i < rows; ++i)
      for(int j = 0; j < cols; ++j)
	m_data[i][j].resize(lays); }
  MatrixTD(int rows, int cols, int lays, T val) : m_data(rows, cols) {
    for(int i = 0; i < rows; ++i){
      for(int j = 0; j < cols; ++j){
	m_data[i][j].resize(lays);
	for(int k = 0; k < lays; ++k)
	  m_data[i][j][k] = val;
      }
    } }
  ~MatrixTD() {}
  
  inline void get_size(int& rows, int& cols, int& lays) {
    m_data.get_size(rows, cols);
    lays = m_data[0][0].size(); }
  //operators
  inline std::vector<T> & operator[](int i) { return m_data[i]; }
  inline const std::vector<T> & operator[] (int i) const { return m_data[i]; }
};

int main(){
  int size = 5;
  int s1, s2, s3;
  MatrixTD<int> m3Dd(size, size, size, 0);
  m3Dd.get_size(s1, s2, s3);
  for(int i = 0; i < s1; ++i){
    for(int j = 0; j < s2; ++j){
      for(int k = 0; k < s3; ++k){
	cout<<m3Dd[i][j][k]<<" ";
      }
      cout<<endl;
    }
    cout<<endl;
  }

  return 0;
}

And the compiler tels me:

vector3D.cpp: In member function ‘std::vector<T, std::allocator<_CharT> >& MatrixTD<T>::operator[](int) [with T = int]':
vector3D.cpp:113: instantiated from here
vector3D.cpp:47: error: invalid initialization of reference of type ‘std::vector<int, std::allocator<int> >&' from expression of type ‘std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >'

Note: I can access the data if I make m_data public and I use m_data[][][], but the operator[] doues not work in the 3D case.

Thank you in advance for any help!

Last edited by vino; 04-16-2009 at 05:51 AM..
# 2  
Old 04-16-2009
Nevermind, i found the answer Smilie, using the operator() :

Code:
inline T  & operator()(int i, int j, int k) { return m_data[i][j][k]; }

This way i can access the data as M(i,j,k). Thanx anyway!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Vector normalisation

In AWK For 3 individual vectors of the form: -2.772 -9.341 -2.857 -5.140 -6.597 -1.823 -2.730 -5.615 1.159 I would like to write a script that parses line by line to (i) normalise, (ii) divide by the norm for *each* vector. I.e. sqrt(-2.772^2 + -9.341^2 + -2.857^2)=10.154 ... (4 Replies)
Discussion started by: chrisjorg
4 Replies

2. Programming

vector c++

hello guys. i'm new to c++. i've problem using two dimensional vector. i've a project of making conway's game of life. this is the code that i have made so far. my problem is how can i give a two dimensional vector through main. glider.vec1 = vec; is not correct way to give a two... (2 Replies)
Discussion started by: nishrestha
2 Replies

3. Programming

Array and Vector

Hi all, from my understanding I understand that I can use array in this manner. struct test { int a; int b; int c; }; test testing; //creating an array with the structer type testing.a=1; testing.b=2; testing.c=3; If I'm not wrong we can use array in this manner,... (12 Replies)
Discussion started by: vinzping
12 Replies

4. Programming

question about int arrays and file pointer arrays

if i declare both but don't input any variables what values will the int array and file pointer array have on default, and if i want to reset any of the elements of both arrays to default, should i just set it to 0 or NULL or what? (1 Reply)
Discussion started by: omega666
1 Replies

5. Programming

sort a vector

Hi all, I have a vector,the type of the element within it is list<int>,and i wanna sort this vector.So i implemented a function as a predicate for sort(the STL algorithm).Problem came when i missed the bold part in my code,g++ generated lots of error messages.And after i added the bold... (4 Replies)
Discussion started by: homeboy
4 Replies

6. Programming

C++ Map using a Vector as a Value Type?

I modified some code I found on Wikipedia concerning maps to see if it would work before applying it to a project I'm working on that has a similar idea. What I would want is for a user to be able to enter sentences and then be able to distinguish how many times a the person entered a word in a... (4 Replies)
Discussion started by: kcgb20
4 Replies

7. Programming

multidimensional array using c++ vector

Hi! I need to make dynamic multidimensional arrays using the vector class. I found in this page How to dynamically create a two dimensional array? - Microsoft: Visual C++ FAQ - Tek-Tips the way to do it in 2D, and now i'm trying to expand it to 3D but i don't understand how is the operator working,... (0 Replies)
Discussion started by: carl.alv
0 Replies

8. Programming

Vector Traversing

Hi i have the following structure struct S { char Mod_num; char val; char chr_nm_cd; } I am reading a 2GB file and inserting into the structure and writing into a vector. I feel like only vector will be a right option. I tried with multimap but it is memory intensive and hence i... (1 Reply)
Discussion started by: dhanamurthy
1 Replies

9. Programming

Linker error when using vector's

using SUN C++ I have a problem when I do a push_back on a vector. The linker gives me a undefined symbol error on __cxa_end_catch. Any ideas, is there a library to include? Thanks Chris (1 Reply)
Discussion started by: CDurkin
1 Replies

10. Programming

Saving a vector to a file

Another C++ question, please do notify me if this forum is C-only! :) I'm having a vector... vector<Person> x; ... with a class I've defined (Person). I have several elements in this vector and I would like to save it to a file (binary (?)). And later on open up this file to retrieve... (1 Reply)
Discussion started by: J.P
1 Replies
Login or Register to Ask a Question