gpt4 book ai didi

c++ - 为什么 basic_string::append (iter, iter) 不调用 std::copy?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:02 34 4
gpt4 key购买 nike

我刚刚发现在 Visual Studio C++ 2010 中,basic_string::append (iter, iter) 显然不是通过使用 std::copy.

第一个问题:

现在假设我实现了自己的迭代器类型,并为我的迭代器类型优化了 std::copy 重载,以便提供更高效的 block 式复制。除了重载 append 之外,还有什么方法可以让 basic_string::append 使用此优化?

basic_string::append (iter, iter) 是否有可能不进行字符复制?

第二个问题(作为我自己实现的起点):

以下是否保证有效?

std::string t ("JohnB");
std::string s;
s.reserve (10);
std::copy (t.begin (), t.end (), s.begin ());
s.push_back ('\0');

或者我应该更好地使用 back_inserter?如果我使用 back_inserter - 如何避免按字符复制?

最佳答案

字符串类有自己的特征类,定义了它可以对其包含的字符执行的操作。

复制char小号,basic_string<char>将使用 std::char_traits<char>::copy (而不是更一般的 std::copy )。这可能映射到 memcpy标准 C 库中的函数。

关于c++ - 为什么 basic_string::append (iter, iter) 不调用 std::copy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574280/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com