从字符串向量初始化2d数组的最简单方法是什么?

陷阱

我有:

vector<string> myVector = {0};

myVector.push_back("first");
myVector.push_back("second");

char *list[] = ????

我希望像我这样做时那样对其进行初始化

char *list[] = { "first", "second", NULL };

我知道我可以根据向量的大小和向量以及向量(list[v.size()+1][longest_string_in_vector])中最长字符串的大小开始分配内存,但是我想知道我没有想到可能会更容易/更快速地进行分配。

保罗·麦肯齐

如果旧代码要求使用char **,则要创建变量列表,可以像最初在问题中所做的那样创建向量。

之后,创建一个std::vector<char *>,其中指针是矢量中每个项目的指针。当然,您必须确保向量不会超出范围或调整大小。在创建之前,必须完全“设置”它std::vector<char *>

另外,由于您可以确定Legacy函数不会尝试更改发送给它的字符串,因此我们应该删除字符串的“常数”。

#include <vector>
#include <string>
#include <iostream>

void legacy_function(char **myList) 
{
     for (int i = 0; myList[i]; ++i)
          std::cout << myList[i] << "\n";
}

using namespace std;
int main()
{
    vector<string> myVector;
    myVector.push_back("first");
    myVector.push_back("second");
    //...
    // create the pointer vector
    vector<char *> myPtrVector;
    // add pointer to string to vector
    for (size_t i = 0; i < myVector.size(); ++i)
       myPtrVector.push_back(const_cast<char*>(myVector[i].c_str()));
    // stick the null at the end
    myPtrVector.push_back(NULL);
    // ...
    // call legacy function
    legacy_function(&myPtrVector[0]);
}  

基本上,我们在向量中创建了字符串,并创建了另一个存储指向字符串的指针的向量。

请注意,该函数legacy_function带有一个char **,而我们要做的就是将其传递给指针向量中第一个元素的地址。

实时示例:http//ideone.com/77oNns

编辑:在代码组织方面,更好的方法是封装数组的创建,而不是将代码散布在程序的不同区域中:

#include <vector>
#include <string>

class CharPtrPtr
{
   std::vector<std::string> m_args;
   std::vector<char *> m_argsptr;

   public:
       void add(const std::string& s) { m_args.push_back(s); }

       char ** create_argsPtr() 
       { 
          m_argsptr.clear();
          for (size_t i = 0; i < m_args.size(); ++i)
             m_argsptr.push_back(const_cast<char*>(m_args[i].c_str()));
          m_argsptr.push_back(NULL);
          return &m_argsptr[0]; 
       }

       char **get_argsPtr() { return m_argsptr.empty()?NULL:&m_argsptr[0]; }

       void clear_args() { m_args.clear(); m_argsptr.clear(); }
};


#include <iostream>

void legacy_function(char **myList) 
{
    for (int i = 0; myList[i]; ++i)
        std::cout << myList[i] << "\n";
}

int main()
{
    CharPtrPtr args;
    args.add("first");
    args.add("second");
    legacy_function(args.create_argsPtr());
}     

实时示例:http//coliru.stacked-crooked.com/a/834afa665f054a1f

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Java 8将字符串数组转换为int数组的最简单方法是什么?

来自分类Dev

在Rails中将:pluck或:collect结果转换为字符串数组的最简单方法是什么?

来自分类Dev

初始化2D字符串数组并打印

来自分类Dev

F#初始化2D字符串数组

来自分类Dev

初始化2D字符串数组并打印

来自分类Dev

使用JS在字符串中找出字符重复的最简单方法是什么?

来自分类Dev

防止空字符终止我的字符串的最简单方法是什么?

来自分类Dev

在Julia中获取UTF-8子字符串的最简单方法是什么

来自分类Dev

在Powershell中增加字符串变量中数字的最快/最简单方法是什么?

来自分类Dev

将字符串(例如“5:4”)转换为数值的最简单方法是什么

来自分类Dev

初始化向量字符串数组时出错

来自分类Dev

无法从成员变量的初始化字符串推断数组大小的原因是什么?

来自分类Dev

在数组中为所有字符串加上前缀“!”的最简单方法是什么?(感叹号)在javascript中?

来自分类Dev

在特定的两个字符之间获取字符串的最简单方法是什么?

来自分类Dev

检查数据帧值中是否出现字符/子字符串的最简单方法是什么?

来自分类Dev

在Python中初始化矩阵的更简单方法是什么?

来自分类Dev

在Javascript中将对象连接为以空格分隔的字符串的最简单方法是什么

来自分类Dev

使用部分匹配的字符串进行CLI搜索和替换的最简单方法是什么?

来自分类Dev

在Elixir中将列表数据结构转换为字符串的最简单方法是什么

来自分类Dev

将字符串存储到以后可以搜索和比较的表中的最简单方法是什么?

来自分类Dev

字符串数组初始化

来自分类Dev

字符串向量的初始化向量的编译时间

来自分类Dev

参数化异常消息的最简单方法是什么?

来自分类Dev

将字符串拆分为char数组的最简单方法

来自分类Dev

在Python和c ++ 2d数组初始化之间。这是什么 ?为什么呢?

来自分类Dev

格式化字符串(如1000000)的最简单方法

来自分类Dev

在Scala中将数组转换为2D数组的最简单方法

来自分类Dev

是否可以从数组初始化字符串向量?如果是这样,怎么办?

来自分类Dev

从Tuple2数组创建案例类对象的最简单方法是什么?

Related 相关文章

  1. 1

    使用Java 8将字符串数组转换为int数组的最简单方法是什么?

  2. 2

    在Rails中将:pluck或:collect结果转换为字符串数组的最简单方法是什么?

  3. 3

    初始化2D字符串数组并打印

  4. 4

    F#初始化2D字符串数组

  5. 5

    初始化2D字符串数组并打印

  6. 6

    使用JS在字符串中找出字符重复的最简单方法是什么?

  7. 7

    防止空字符终止我的字符串的最简单方法是什么?

  8. 8

    在Julia中获取UTF-8子字符串的最简单方法是什么

  9. 9

    在Powershell中增加字符串变量中数字的最快/最简单方法是什么?

  10. 10

    将字符串(例如“5:4”)转换为数值的最简单方法是什么

  11. 11

    初始化向量字符串数组时出错

  12. 12

    无法从成员变量的初始化字符串推断数组大小的原因是什么?

  13. 13

    在数组中为所有字符串加上前缀“!”的最简单方法是什么?(感叹号)在javascript中?

  14. 14

    在特定的两个字符之间获取字符串的最简单方法是什么?

  15. 15

    检查数据帧值中是否出现字符/子字符串的最简单方法是什么?

  16. 16

    在Python中初始化矩阵的更简单方法是什么?

  17. 17

    在Javascript中将对象连接为以空格分隔的字符串的最简单方法是什么

  18. 18

    使用部分匹配的字符串进行CLI搜索和替换的最简单方法是什么?

  19. 19

    在Elixir中将列表数据结构转换为字符串的最简单方法是什么

  20. 20

    将字符串存储到以后可以搜索和比较的表中的最简单方法是什么?

  21. 21

    字符串数组初始化

  22. 22

    字符串向量的初始化向量的编译时间

  23. 23

    参数化异常消息的最简单方法是什么?

  24. 24

    将字符串拆分为char数组的最简单方法

  25. 25

    在Python和c ++ 2d数组初始化之间。这是什么 ?为什么呢?

  26. 26

    格式化字符串(如1000000)的最简单方法

  27. 27

    在Scala中将数组转换为2D数组的最简单方法

  28. 28

    是否可以从数组初始化字符串向量?如果是这样,怎么办?

  29. 29

    从Tuple2数组创建案例类对象的最简单方法是什么?

热门标签

归档