The Third
The Third

Reputation: 795

Traverse though array in cpp

I would like to know if this is a suitable way to traverse through an array in c++.

     int array[] = {4,3,2};

     int n = 0;

    // traverse through array

    while (array[n] >=0){

    cout << array[n];
    n++;

   }

It works for me in my current problem to sort integer arrays.

Upvotes: 1

Views: 11876

Answers (5)

James Kanze
James Kanze

Reputation: 153929

Why on earth do you thing that would work? Most of the time, it won't. If your array contains 0, it obviously won't, and if your array doesn't contain 0, it's very likely to continue too far (resulting in undefined behavior).

To traverse the array:

for ( int n: array ) {
    std::cout << n << std::endl;
}

Or in pre-C++11:

for ( int* current = begin( array ); current != end( array); ++ current ) {
    std::cout << *current << std::endl;
}

In C++11, you can also do this, and you don't even have to write your own versions of begin and end. Pre C++11, you'll need:

template <typename T, size_t n>
T* 
begin( T (&array)[n] )
{
    return array;
}

template <typename T, size_t n>
T*
end( T (&array)[n] )
{
    return array + n;
}

Put them in some universally included header.

Upvotes: 3

lisyarus
lisyarus

Reputation: 15532

int array[] = {4,3,2};

for (size_t i = 0; i < 3; ++i)
{
    std::cout << array[i] << '\n';
}

Or in C++11

for (int x : array)
{
    std::cout << x << '\n';
}

Upvotes: 0

brokenfoot
brokenfoot

Reputation: 11629

Here you are assuming that the index that doesn't have a value assigned by you will contain a -ve number, which isn't true.

You should always traverse using the size of the array:

for(i=0;i<size;i++) //here size is the size of the array
{
// operation on array
}

Upvotes: 0

Arun
Arun

Reputation: 20383

Try this:

    int array[] = {4,3,2};

    // number of elements in array
    int const n = sizeof( array ) / sizeof( array[ 0 ] );

    // traverse through array and print each element
    for( int i = 0; i != n; ++i ) {
         cout << array[ i ];
    }

Upvotes: 0

bstamour
bstamour

Reputation: 7776

This will only work if the data after your array is less than zero. In the typical case you cannot assume this, and so while this loop may work for now, eventually it will break. What you should be doing is looping from zero until you reach the length of the array instead:

for (int i = 0; i < 3; ++i)
    cout << array[i];

or, you can use the new range-for loop in C++11:

for (int i : array)
    cout << i;

Long story short: no. Your loop will not work 100% of the time, and therefore you should not use it.

Upvotes: 1

Related Questions