如何将 int 的向量转换为常量字符*的向量

How to convert a vector of int to vector of const char*

本文关键字:向量 常量 字符 转换 int      更新时间:2023-10-16

我知道如何从 int 向量转换为字符串向量

但是甚至有可能从 int 向量转换为常量字符*向量吗?似乎几乎不可能...

例如,以下代码将是错误的:

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

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

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

#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.
}