从std :: vector <int>转换为char [] C ++

时间:2016-05-27 13:30:03

标签: c++ vector

如果我有一个整数向量(std :: vector),有一种简单的方法可以将该向量中的所有内容转换为char数组(char []),所以(1,2,3) - &gt; (&#39; 1&#39;&#39 2&#39;&#39 3&#39;) 这是我尝试过的,但它不起作用:

initializer

5 个答案:

答案 0 :(得分:4)

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; });

如果您不需要ca成为C风格的数组,我建议您改用std::arraystd::vector。后者需要std::back_inserter(ca)代替begin(ca)

答案 1 :(得分:2)

它可以像这个一样简单

std::vector<int> v { 1, 2, 3 };
std::vector<char> c;
for( int i : v ) c.push_back( '0' + i );

要了解为什么你的方式不起作用,你需要了解平台上代表的整数和符号。

答案 2 :(得分:0)

为什么不在最初将它存储在char矢量中?

std::vector<char> v;
for(int i = 1; i  < 10; i++){
    v.push_back(i + '0');
}

欺骗来自:https://stackoverflow.com/a/2279401/47351

答案 3 :(得分:0)

如果你已经在矢量中得到了数字,那么你可以使用std::transformback_inserter

std::vector<int> v;

std::vector<char> c;
std::transform(v.begin(), v.end(), std::back_inserter(c), [](int i){return '0' + i;});

但是,为什么不说:

std::vector<char> v;

for(char i = '0'; i < '9'; i++)
{
    v.push_back(i);
}

答案 4 :(得分:0)

您可以将std::transformstd::back_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;
}