【问题标题】:C/C++ Value Assignment to std::queue<char*>C/C++ 对 std::queue<char*> 的赋值
【发布时间】:2012-04-20 10:04:31
【问题描述】:

我正在尝试将 char* 值从循环分配到队列中。我一直复制指针而不是分配数据本身。我觉得有一个简单的答案,但我找不到一个很好的例子。

例子

while(something) {
    next = queue.front();
    queue.pop();
    while(something) {
        /* do work */
        /* text has new value of char* */
        queue.push(text);
    }
}

这显然不起作用,因为当我为文本分配一个新值时,队列中的所有条目都会变成那个新值。我需要知道如何进行正确的复制/分配。

【问题讨论】:

    标签: c++ c queue variable-assignment


    【解决方案1】:

    请改用std::queue&lt;std::string&gt;std::string 来保留字符串。

    如果你从某个地方得到一个char *,你可以将它推送到std::queue&lt;std::string&gt;类型的队列中,字符串将被隐式构造。

    如果您出于任何原因不能使用std::string(尽管对于简单的情况,我想不出任何好的方法),您必须:

    1. 获取字符串长度(例如strnlen)。
    2. 分配该大小的新字符数组
    3. 从当前位置复制内容并将填充数组的指针推送到队列中。
    4. 退出队列时,您必须记住释放 2 中分配的数组。

    【讨论】:

    • 我同意这一点。除非出于某些特殊原因(即向后兼容性、性能等),否则 char* 用于 c 或非常低级的 c++ 代码(与 c 代码接口?)。 std::string 更好。
    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多