std::fill arrays

Discussion in 'C++' started by cpisz@austin.rr.com, Jul 20, 2006.

  1. Guest

    I saw that using std::fill was the way to go for setting all elements
    of an array to some value in one foul swoop. However when I tryed it I
    am getting an error.

    Can I only use this for vectors or can I use it for a regular array?

    what I called:
    std::fill(m_start_times[0], m_start_times[8], 0);

    error:
    c:\Program Files\Microsoft Visual Studio .NET
    2003\Vc7\include\xutility(1136): error C2100: illegal indirection

    // TEMPLATE FUNCTION fill
    template<class _FwdIt,
    class _Ty> inline
    void fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
    { // copy _Val through [_First, _Last)
    for (; _First != _Last; ++_First)
    *_First = _Val;
    }
    , Jul 20, 2006
    #1
    1. Advertising

  2. wrote:
    > I saw that using std::fill was the way to go for setting all elements
    > of an array to some value in one foul swoop. However when I tryed it I
    > am getting an error.
    >
    > Can I only use this for vectors or can I use it for a regular array?
    >
    > what I called:
    > std::fill(m_start_times[0], m_start_times[8], 0);


    The arguments to 'fill' have to comply with 'iterator' traits. Elements
    of the array don't. You need to use pointers:

    std::fill(m_start_times + 0, m_start_times + 8, 0);

    >
    > error:
    > c:\Program Files\Microsoft Visual Studio .NET
    > 2003\Vc7\include\xutility(1136): error C2100: illegal indirection
    >
    > // TEMPLATE FUNCTION fill
    > template<class _FwdIt,
    > class _Ty> inline
    > void fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
    > { // copy _Val through [_First, _Last)
    > for (; _First != _Last; ++_First)
    > *_First = _Val;
    > }


    V
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Jul 20, 2006
    #2
    1. Advertising

  3. Mike Wahler Guest

    <> wrote in message
    news:...
    >I saw that using std::fill was the way to go for setting all elements
    > of an array to some value in one foul swoop. However when I tryed it I
    > am getting an error.
    >
    > Can I only use this for vectors or can I use it for a regular array?
    >
    > what I called:
    > std::fill(m_start_times[0], m_start_times[8], 0);


    std::fill(&m_start_times[0], &m_start_times[8], 0);

    or

    std::fill(m_start_times, m_start_times + 8, 0);

    The second argument should be the address of the
    'one-past-the-end' element; e.g. your example above
    assumes an eight element array (indices 0 through
    7).

    -Mike

    >
    > error:
    > c:\Program Files\Microsoft Visual Studio .NET
    > 2003\Vc7\include\xutility(1136): error C2100: illegal indirection


    -Mike
    Mike Wahler, Jul 21, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page