Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost-users] [assign] std::vector initialisation by boost::assign::list_of
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2010-03-17 11:58:16


mmmm...

Actually, I would probably create an empty vector and use the list_of in the
constructor's body.

Another idea I just came up with, is to use an transforming iterator, which
iterates over the list_of instance and additionally can be compared with a
default constructed iterator instance. Smth like:

vector<int> v(my_iterator(list_of(1)(2)), my_iterator());

Regards,
Ovanes

On Wed, Mar 17, 2010 at 4:16 PM, Ovanes Markarian <om_boost_at_[hidden]>wrote:

> Actually I tested some of them with gcc and the only solution I came up to
> resolve ambiguity is:
>
>
> #include <boost/assign.hpp>
> #include <vector>
> #include <iterator>
> #include <algorithm>
> #include <iostream>
>
>
> using namespace std;
> using namespace boost;
> using namespace boost::assign;
>
>
>
> int main(int argc, char* argv[])
> {
> typedef vector<int> int_vec;
> int_vec v = list_of(1)(2);
> int_vec v2(2);
> v2=list_of(1)(2).to_container(v2);
>
> ostream_iterator<int> oiter(cout, ",");
> copy(v2.begin(), v2.end(), oiter);
> }
>
> Hope that helps,
>
> Ovanes
>
>
>
> On Wed, Mar 17, 2010 at 1:52 PM, Ovanes Markarian <om_boost_at_[hidden]>wrote:
>
>> Sorry, it must be to_container() and not to_adapter().
>>
>>
>> On Wed, Mar 17, 2010 at 1:51 PM, Ovanes Markarian <om_boost_at_[hidden]
>> > wrote:
>>
>>>
>>> On Wed, Mar 17, 2010 at 1:32 PM, Andrey Torba <andreytorba_at_[hidden]>wrote:
>>>
>>>> The code is compilable on msvc but is not on gcc-4.3:
>>>>
>>>> But the problem occurs when i try to initialise std::vector in a class
>>>> initialization list:
>>>> class sss
>>>> {
>>>> std::vector<int> v;
>>>> sss()
>>>> : v(boost::assign::list_of(1)(2))
>>>> {}
>>>> };
>>>>
>>>> What happens if you call:
>>> sss()
>>> : v(boost::assign::list_of(1)(2).to_adapter())
>>> {}
>>>
>>> list_of implements 2 members:
>>> implicit conversion opertor to the container type and the to_adapter
>>> member. You can cast list_of instance to your vector<int> if that with
>>> adapter does not work. Other solution can be:
>>>
>>> If you need efficiency, you still can use the vector ctor which reserves
>>> the number of items in a vector and than copies
>>> the elements from the list.
>>>
>>> sss() : v(2)
>>> {
>>> v = list_of...;
>>> }
>>>
>>> Regards,
>>> Ovanes
>>>
>>>
>>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net