如何查看具有 O(1) 常数复杂度的 stringstream 对象中的最后一个字符?

How to see the last character in a stringstream object with O(1) constant complexity?

我试图在将一些内容冲入 std::stringstream 对象后去掉尾随换行符。现在我会尝试这样的事情:

const char* inputvalue = "My line\n";
std::stringstream stream;

stream << std::string{inputvalue};
stream.seekp( -1, std::ios_base::end );

if( stream.peek() == '\n' ) {
    stream << " ";
} else {
    stream.seekp( 0, std::ios_base::end );
}

这是最有效的方法吗,即更少的 CPU 指令和时间?

作为旁注,除了放置 space 字符以在不牺牲性能的情况下摆脱新行之外,我是否可以完全删除最后一个换行符?

stringstream 上添加东西之前,我正在使用 const char* 并检查它上面是否有新行 \n。如果是这样,我将其转换为 char* 并在 size-1 上以 [=15=] 结束字符串。

Py_ssize_t linesize;
std::stringstream stream;

char* nonconstcharline;
const char* constcharline;

for( PyObject* linepy : linecache ) {
    constcharline = PyUnicode_AsUTF8AndSize( linepy, &linesize );

    if( constcharline[linesize-1] == '\n' ) {
        nonconstcharline = const_cast<char *>( constcharline );
        nonconstcharline[linesize-1] = '[=10=]';
        stream << std::string{nonconstcharline};
    }
    else {
        stream << std::string{constcharline};
    }
}

我阅读了另一个问题 How to use const_cast? 我不应该做 const char*char* 并更改它,因为我似乎不拥有 const char* 东西,但是到目前为止没问题。