指针上的 C++ 子串

标签 c++ string performance memory

在 C++ 中是否可以创建一个子字符串作为指向与原始字符串相同的内存的指针?

假设我有一个字符串 s = "just testing" 和一个函数 f。我希望函数 f 返回一个常量字符串对象(用户无法更改它),它将是 s 的子字符串,我希望 f 以最有效的方式创建此子字符串方式。

我唯一的想法是返回一对指针 - 在子字符串的开头和结尾,但我很想给最终用户 f 返回的“感觉”一个对象,他可以打印它,迭代它等等。

在 C++ 中可以吗?

最佳答案

是的,这是可能的。

您应该编写自己的类作为子字符串开头和结尾的包装器。

这段代码并不完整,但指明了方向。

class string_ref
{
    std::string::iterator b, e; // begin and end
public:
    string_ref(std::string::iterator b, std::string::iterator e) : b(b), e(e){}

    std::string to_string() const {
        return std::string(b, e);
    }

    std::string::iterator begin() const {
        return b;
    }

    std::string::iterator end() const {
        return e;
    }
    // ... Code to complete this class ... //
};

std::ostream &operator<<(std::ostream &out, const string_ref &str) {
    // out << str.to_string();
    for (std::string::iterator i = str.begin(); i != str.end(); i++) cout << *i;
    return out;
}

int main() {
    std::string s = "Hello";
    string_ref sr(s.begin(), next(s.begin(),3)); // pick first 3 charaters
    cout << sr << endl;                          // print it by cout
}

您可以简单地迭代和打印它。

关于指针上的 C++ 子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989381/

相关文章:

c++ - 如何获取社会表的模式或行名称?

python - 为什么 line != "\n"或 line != "\r\n"或 line ! ="\r"无法过滤空行?

c++ - Alpha 修整过滤器的问题

c++ - 当容器作为私有(private)成员在类中时如何访问容器方法?

python - 尝试根据大小写将一个字符串解析为两个单独的字符串

java - 确保单词具有特定长度

python - 改进 Boyer-Moore 字符串搜索

ListView.builder 上 initialScrollOffset 的性能问题

java - 使用 Stringbuilder 与整数数组的算法性能

c++ - 在 magick++ api 中调整大小的默认过滤器类型