Re: cout << vector<string>
On Nov 10, 6:29 am, "rio" <a...@b.c> wrote:
"rio" <a...@b.c> ha scritto nel
messaggionews:4916aba2$0$40315$4fafbaef@reader5.news.tin.it...
"Kai-Uwe Bux" <jkherci...@gmx.net> ha scritto nel messaggio
news:49144af2$0$17068$6e1ede2f@read.cnntp.org...
Juha Nieminen wrote:
Jeff Schwab wrote:
template<typename T>
std::ostream& operator<<(std::ostream& out, std::vector<T> const& v)=
{
if (!v.empty()) {
typedef std::ostream_iterator<T> out_iter;
copy(v.begin(), v.end() - 1, out_iter( out, " " ));
out << v.back();
}
return out;
}
Is there some advantage of that code over a shorter and simpler:
template<typename T>
std::ostream& operator<<(std::ostream& out, std::vector<T> const& v) =
{
for(std::size_t i = 0; i < v.size()-1; ++i)
Nit: std::size_t is not guaranteed to be vector::size_type.
i know max(std::size_t) >= max(vector::size_type)
If this is true, then g++, VC++ and both of the library
implementations used with Sun CC are buggy, since they all allow
me to instantiate std::vector with an allocator which typedef's
size_type to unsigned long long.
i know v.size()-1<=max(vector::size_type) <= max(std::size_t)
Given that v.size() returns a vector::size_type, it's safe to
say that v.size() <= max( vector::size_type ). But if
vector::size_type is an unsigned long long, and size_t is only
an unsigned long or an unsigned int, the second part is false.
Depending on what you're doing, it may be acceptable to suppose
that the default allocator is being used---I use size_t for this
a lot, when I know the actual instantiation of vector. But it's
not acceptable in a generic library.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34