Some programmers seem to violently hate them, while others seem to think they're fine. I know that anything that can be done to a multi-dimensional array can also be done to a regular array, so they're functionally equivalent. Is it bad practice to use multi-dimensional arrays, or does it not matter?
相关问题
- Sorting 3 numbers without branching [closed]
- Multiple sockets for clients to connect to
- How to compile C++ code in GDB?
- Why does const allow implicit conversion of refere
- thread_local variables initialization
Do you need to store multi-dimensional data where you know the dimensions ahead of time? If so, use a multi-dimensional array.
If you don't know the dimensions ahead of time (i.e., you're going to have to dynamically allocate the array), then you either need to either
It depends on the specific use case, but as a rule of thumb, I almost always prefer the former because it makes for less memory management hassle and fewer heap allocations. The complexity for both approaches grows as the number of dimensions increases, but, in my opinion, it grows much faster for the latter approach due to the extra levels of indirection.
There are following advantages of multi-dimensional arrays over
Vector<Vector<>>
:Well, in C++ I dislike multidimensional arrays because they should be replaced with
std::vector<std::vector<t> >
. They're also particularly important if you want to represent astd::vector<std::basic_string<t> >
.Multidimensional arrays are so simple a primitive I'm suprised most would care. However, a design that uses a single dimension is probably better than one using multiple dimensions, all other things being equal.
I can recommend Boost.MultiArray. Boost.MultiArray provides a generic N-dimensional array concept definition and common implementations of that interface.
http://www.boost.org/doc/libs/1_42_0/libs/multi_array/doc/index.html
It may be possible to store multi-dimensional data in a single-data array, but you have to keep track of the indexes yourself. Multi-dimensional arrays are actually stored in memory as a single dimensional array, with syntax to support representing that data as multi-dimensional.
If you are working with multi-dimensional data, then I feel it is most appropriate to choose the correct tool for the job (a multi-dimensional array).
Advantages of multi-dim arrays to
Vector<Vector<>>
Disadvantages:
Basically though, it comes down to lack of bounds checking for me.