c++ - 在 C++ 中为字符串指针的动态数组寻找一个简单的包装器

标签 c++

我需要一个简单的类来包装一个 c 风格的指针字符串数组,即 char **
我需要对包装器进行最少的操作,包括添加元素( const 或非 const )、迭代、随机访问和查询大小。我开始使用如下所示的 std::vector 但我不喜欢它,原因如下所述
这是我的开始

struct CstrVector
{
   CstrVector(){}
    char *convertToC(const std::string & str)
    {
        char *c = new char[str.size()+1];
        std::strcpy(c, str.c_str());
        return c; 
    }
    void add( const char* c)
    {
       //??
    }
    void add(const std::string& str )
    {
        data.push_back(convertToC(str));
    }
    void add(const std::string& s, unsigned int pos )
    {
        if( pos < data.size())
        {
            data[pos] = convertToC(s);
        }
    } 
   ~CstrVector()
   {
     for ( size_t i = 0 ; i < data.size() ; i++ )
     {
        delete [] data[i];
     }
   }
   char ** vdata;
  std::vector<char*> data; // I want to replace this with char ** vdata
};

为什么不使用
std::vector<char*>
我看不到它有什么好处,因为无论如何我仍然必须在容器 ( std::vector ) 之外分配和释​​放内存
为什么不使用
std::vector<std:string>
因为我希望能够轻松地将数组传递给将操纵/更改其内容的 C 函数。

最佳答案

你应该使用

std::vector<std:string> 

如果您想将char 字符串传递给c 函数,您只需使用 string::c_str 即可。

关于c++ - 在 C++ 中为字符串指针的动态数组寻找一个简单的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178417/

相关文章:

c++ - 我可以使用 Qt 4.8.4 为 Windows 2000 进行部署吗?

c++ - 使用 boost::program_options 接受负 double

c++ - 稍后在 C++ 中安排事件 : how to pass the task to be ran

c++ - 使用 C++ STL 库查找变量模式

c++ - 泡泡---让效率更高

c++ - 连接qt和matlab时出错

c++ - 在 C++、Ubuntu 中使用 BMP 文件

c++ - 使用 ASCII 值作为条件

C++ 错误 : "expected constructor, destructor, or type conversion before ' <' token

c++ - 读取数字并转换为单词