我有一个小问题: 我有:
std::vector<char> charArray(7);
std::vector<int> intArray(7);
int tempInt;
char tempChar;
是否合适:
for(int i=0; i<charArray.size();i++)
{
tempInt= static_cast<int>(charArray.at(i));
intArray.at(i)=tempInt;
}
// some operations with elemets of intArray
// Like intArray.at(0) = intArray.at(1)^intArray.at(2);
// next back conversion to chars
for(int i=0;i<7;i++)
{
tempChar=static_cast<char>(intArray.at(i));
// Thanks to
charArray.at(i)=tempChar;
}
是不是?或者我应该使用其他一些功能吗?
答案 0 :(得分:1)
static_cast<>
完全可以将char
转换为int
,反之亦然。
答案 1 :(得分:1)
不,你有一个阻止编译的错误。
charArray=tempChar;
应该是:
charArray.at(i) = tempChar;
一旦修复了,你的片段(假设它构成了一个更广泛,格式良好的程序的一部分)本身就是格式良好的,我只能猜测你想要它做什么。
答案 2 :(得分:0)
您可以使用标准副本。
std::copy(intArray.begin(), intArray.end(), charArray.begin());
不幸的是,编译器可能会警告您隐式地从较大的数据类型转换为较小的数据类型。我们可以通过使用标准变换和投射函数来解决这个问题。
template<class Out_T, class In_T>
inline Out_T Convert(const In_T& x)
{
return static_cast<Out_T>(x);
}
...
std::transform(intArray.begin(), intArray.end(), charArray.begin(), Convert<decltype(charArray)::value_type, decltype(intArray)::value_type>);
这看起来很丑陋,所以让我们把它包装成一个函数。
template<class Input_Itr, class Output_Itr>
void ConvertRange(Input_Itr in, Input_Itr in_end, Output_Itr out)
{
std::transform(in, in_end, out, Convert<typename std::iterator_traits<Output_Itr>::value_type, typename std::iterator_traits<Input_Itr>::value_type>);
}
现在您只需调用代码:
ConvertRange(intArray.begin(), intArray.end(), charArray.end());