C++ 从std::vector转换<;int>;到字符[]C++;
如果我有一个整数向量(std::vector),有没有一种简单的方法可以将该向量中的所有内容转换为字符数组(char[])所以(1,2,3)->('1','2','3')) 这是我尝试过的,但不起作用:C++ 从std::vector转换<;int>;到字符[]C++;,c++,vector,C++,Vector,如果我有一个整数向量(std::vector),有没有一种简单的方法可以将该向量中的所有内容转换为字符数组(char[])所以(1,2,3)->('1','2','3')) 这是我尝试过的,但不起作用: std::vector<int> v; for(int i = 1; i < 10; i++){ v.push_back(i); } char *a = &v[0]; std::vector v; 对于(int i=1;i
std::vector<int> v;
for(int i = 1; i < 10; i++){
v.push_back(i);
}
char *a = &v[0];
std::vector v;
对于(int i=1;i<10;i++){
v、 推回(i);
}
char*a=&v[0];
就这么简单
std::vector<int> v { 1, 2, 3 };
std::vector<char> c;
for( int i : v ) c.push_back( '0' + i );
std::向量v{1,2,3};
std::向量c;
对于(int i:v)c.向后推('0'+i);
要了解为什么您的方式不起作用,您需要了解整数和符号在您的平台上是如何表示的。为什么不先将其存储在char vector中
std::vector<char> v;
for(int i = 1; i < 10; i++){
v.push_back(i + '0');
}
std::vector v;
对于(int i=1;i<10;i++){
v、 向后推_(i+‘0’);
}
技巧来源:
std::transform
是作业的正确工具:
std::vector<int> iv {1, 2, 3, 4, 5, 6};
char ca[10] {};
using std::begin;
using std::end;
std::transform(begin(iv), end(iv), begin(ca), [](int i) { return '0' + i; });
std::向量iv{1,2,3,4,5,6};
char-ca[10]{};
使用std::begin;
使用std::end;
std::transform(begin(iv)、end(iv)、begin(ca),[](inti){return'0'+i;});
如果您不需要
ca
成为C样式的数组,我建议使用std::array
或std::vector
。后者需要使用std::back\u inserter(ca)
代替begin(ca)
如果您已经在向量中获得了数字,则可以使用和:
std::vector v;
std::向量c;
std::transform(v.begin(),v.end(),std::back_插入器(c),[](inti){return'0'+i;});
但是,为什么不说:
std::vector<char> v;
for(char i = '0'; i < '9'; i++)
{
v.push_back(i);
}
std::vector v;
for(字符i='0';i<'9';i++)
{
v、 推回(i);
}
您可以将std::transform
与std::back\u inserter
一起使用,可能类似于:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> vI{0,1,2,3,4,5,6,7,8,9};
std::vector<char> vC;
std::transform(vI.begin(), vI.end(), std::back_inserter(vC), [](const int &i){ return '0'+i; });
for(const auto &i: vC)
{
std::cout << i << std::endl;
}
return 0;
}
#包括
#包括
#包括
int main()
{
向量vI{0,1,2,3,4,5,6,7,8,9};
std::向量vC;
std::transform(vI.begin()、vI.end()、std::back_插入器(vC),[](const int&i){return'0'+i;});
用于(常数自动和i:vC)
{
std::我可以问一下为什么需要这样做吗。还有为什么不将其转换为std::string
?您可以使用itoa
按照自己的意愿从int转换为char。std::transform()将允许您在容器上执行此操作。对于大于9或小于0的整数,您希望得到什么结果?是否有方法可以这样做,以便动态分配字符数组?这样它就可以具有变量size@AllenHuang您可以使用new
分配它,并将指针本身传递给std::transform
,但更好的方法是使用std::vector
。这很有效,谢谢,我使用了一个字符数组,因为我将它与zLib一起使用
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> vI{0,1,2,3,4,5,6,7,8,9};
std::vector<char> vC;
std::transform(vI.begin(), vI.end(), std::back_inserter(vC), [](const int &i){ return '0'+i; });
for(const auto &i: vC)
{
std::cout << i << std::endl;
}
return 0;
}