## Expand description

## Two Dimensional Grid

Continuous growable 2D data structure.
The purpose of this crate is to provide an universal data structure that is faster,
uses less memory, and is easier to use than a naive `Vec<Vec<T>>`

solution.

Similar to *C-like* arrays `grid`

uses a flat 1D `Vec<T>`

data structure to have a continuous
memory data layout. See also this
explanation of why you should probably use a one-dimensional array approach.

Note that this crate uses a *row-major* memory layout.
Therefore, `grid.push_row()`

is way faster then the `grid.push_col()`

operation.

This crate will always provide a 2D data structure. If you need three or more dimensions take a look at the
ndarray library. The `grid`

create is a container for all kind of data.
If you need to perform matrix operations, you are better of with a linear algebra lib, such as
cgmath or nalgebra.
No other dependencies except for the std lib are used.
Most of the functions `std::Vec<T>`

offer are also implemented in `grid`

and slightly modified for a 2D data object.

## Examples

```
use grid::*;
let mut grid = grid![[1,2,3]
[4,5,6]];
assert_eq!(grid, Grid::from_vec(vec![1,2,3,4,5,6],3));
assert_eq!(grid.get(0,2), Some(&3));
assert_eq!(grid[1][1], 5);
assert_eq!(grid.size(), (2,3));
grid.push_row(vec![7,8,9]);
assert_eq!(grid, grid![[1,2,3][4,5,6][7,8,9]])
```

## Macros

- Init a grid with values.

## Structs

- Stores elements of a certain type in a 2D grid structure.