如何将int的向量转换为const char的向量*

时间:2016-02-06 02:15:54

标签: c++ string vector char const

我知道如何从int的vector转换为string的向量

但是甚至可以从int的vector转换为const char *的vector吗? 似乎几乎不可能......

例如,以下代码将出错:

int n=3;
vector<int> vec;
for(int i=1;i<=n;i++){vec.push_back(i);}

vector<const char*> charArray;
for(int i=0;i<vec.size();i++)
{
    std::string s = std::to_string(vec[i]);
    charArray.push_back( s.c_str() );
}
for( int i=0;i<charArray.size();i++)
{
    cout<<charArray[i]<<endl;
}

它将在屏幕上打印以下内容: 3 3 3

1 个答案:

答案 0 :(得分:0)

如果您需要std::vector const char*作为库函数的输入,您可以这样做。

#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <sstream>

void LibraryFunction(std::vector<const char*>& charVec)
{
    for (size_t i = 0; i < charVec.size(); ++i)
    {
        std::cout << charVec[i] << " ";
    }
}

std::string to_string(int i)
{
    std::stringstream ss;
    ss << i;
    return ss.str();
}

int main() {
    int arr[] = { 1,2,3 };
    std::vector<int> vec(arr, arr + 3); // your vector from before
    std::vector<std::string> strVec;
    strVec.reserve(vec.size());
    std::transform(vec.begin(), vec.end(), std::back_inserter(strVec), to_string);
    { // use block to make sure charVec is removed before strVec.
        std::vector<const char*> charVec;
        charVec.reserve(strVec.size());
        for (size_t i = 0; i < strVec.size(); ++i)
        {
             charVec.push_back(strVec[i].c_str());
        }
        LibraryFunction(charVec); // call your lib function here
    } // now strVec can be safely removed.
}