Re: sorting 5million minute data: choose std::list or std::vector
On 2011-02-14 17:29:23 -0500, Paavo Helde said:
Pete Becker <pete@versatilecoding.com> wrote in news:2011021415103940206-
pete@versatilecodingcom:
On 2011-02-14 14:03:02 -0500, Paavo Helde said:
I would certainly prefer std::string to use a signed type for
size_type.
For example, the npos value -1 would be something much more concrete
and
would be representable in any signed type, regardless of whether the
string::size_type is 32 or 64 bit.
I don't get the point here. -1 is representable in every unsigned type.
It doesn't matter whether the underlying size_type is 32 or 64 bits.
#include <string>
#include <iostream>
int main() {
std::string s = "abc";
// unsigned used because "indexes are not negative"
unsigned int k = s.find('x');
if (k==s.npos) {
std::cout << "ok\n";
} else {
std::cout << "FAIL\n";
}
}
This works fine if size_type is the same size than unsigned int (e.g.
32bit), but fails in a common 64-bit compilation.
It also works fine if "unsigned int" is changed to
"std::string::size_type". (Okay, having read further, I see that you
covered this. Nevertheless, using the correct type is always better
than using a type that you think might be correct)
If npos was signed and -1, then this would work fine with "int k",
regardless of the size of std::string::size_type. Actually, it seems to
work fine with "int k" even now in a 64-bit MSVC compilation, but this
involves unsigned -> signed conversion of an out-of-range value and is
thus implementation-defined behavior.
Currently the correct solution is to use std::string::size_type instead
of int or unsigned int. However, this is an extra piece of detail to
follow and not so easy to get correct at first attempt. If I know that my
app is only dealing with ordinary strings, easily addressable by a plain
int, why should I need to take care about such details?
Because you wan't the code to be correct? <g>
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)