sizeof
не говорит вам длину вектора. Он сообщает вам размер (в байтах) фактического объекта.
Чтобы получить количество элементов, хранящихся в векторе, используйте unsorted.size()
.
Обратите внимание, что в C ++ 11 и более поздних версиях вы можете итерировать свой вектор с помощью цикла на основе диапазона:
for (const auto& str : unsorted) {
double x = stod(str);
if (!isnan(x)) {
sanitised.push_back(x);
}
}
Потому что это указатель на foo. И у Фу 3 символа. Так становится P3foo
. Другой имеет тип foo
, поэтому он становится 3foo
. Обратите внимание, что текст зависит от реализации, и в этом случае GCC просто дает вам внутреннее искаженное имя.
Введите это искаженное имя в программу c ++ fil
, чтобы получить незафиксированное имя:
$ c++filt -t P3foo
foo*
std :: type_info :: name ()
возвращает имя конкретной реализации. AFAIK, нет портативного способа получить "красивое" имя, хотя у GCC есть одно . Посмотрите на abi :: __ cxa_demangle ()
.
int status;
char *realname = abi::__cxa_demangle(typeid(obj).name(), 0, 0, &status);
std::cout << realname;
free(realname);