Да, это потому, что вы работаете с данными char.operator<<
имеет перегрузки для char
и unsigned char
, которые печатают эти значения в виде символов, а не цифр.Поскольку вы хотите, чтобы числа просто переключались на int
с unsigned char
.
int ia[] = { 2, 4, 6, 6, 8, 10,
6, 12, 234, 14, 16, 6, 6
};
int size = sizeof(ia) / sizeof(*ia);
std::cout << "Construct from int array:\n";
cs150::vector<int> temp_vec;
Если вы правильно сделали шаблон, то никаких других изменений не потребуется.
Если вы действительноЕсли вы хотите придерживаться данных char, то одним из способов было бы написать специализацию вашей функции Print
для unsigned char
, чтобы она печатала символы в виде чисел.
template <>
inline void Print(const vector<unsigned char>& s)
{
for(int i = 0; i < s.count; i++)
{
std::cout<<(unsigned)s.v[i]<<" "; // print chars as numbers
}
std::cout<< "(size=" << s.count << " " << "capacity=" << s.capacity << ")";
std::cout<<std::endl;
}
Эта специализация в дополнение куниверсальная версия.Он говорит, что когда T
равен unsigned char
, используйте эту версию вместо универсальной версии.
Не совсем уверен, нужно ли вам объявить эту версию в качестве друга или нет.Без сомнения, вы узнаете это.