Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从std::vector转换<;int>;到字符[]C++;_C++_Vector - Fatal编程技术网

C++ 从std::vector转换<;int>;到字符[]C++;

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),有没有一种简单的方法可以将该向量中的所有内容转换为字符数组(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<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;
}