gpt4 book ai didi

C++ std::copy 结果不同于字符串构造函数

转载 作者:太空狗 更新时间:2023-10-29 20:02:35 32 4
gpt4 key购买 nike

我在使用 std::copy 时遇到了一些奇怪的行为。与

std::vector<std::string> chosenIDs{...};
for (const auto& x : chosenIDs) {
std::string strID("");
std::copy(std::begin(x), std::find(std::begin(x), std::end(x), '.'), std::begin(strID));
std::cout << strID << "\n";
}

然而,strID 字符串包含不应该包含的字符

std::vector<std::string> chosenIDs{...};
for (const auto& x : chosenIDs) {
std::string strID(std::begin(x), std::find(std::begin(x), std::end(x), '.'));
std::cout << strID << "\n";
}

完全可以正常工作。我很清楚我应该使用第二种方法,但它仍然让我感到困惑,为什么第一个片段中的行为与第二个片段中的行为不同。

我正在使用 GCC 5.4.0

最佳答案

当使用 std::copy() 时,有必要确保两个范围都不会越界访问。目标范围一开始是空的,并且没有做任何事情来扩展它。因此,结果是未定义的行为。

问题可以解决,例如,通过使用目标迭代器增长目标序列:

std::copy(std::begin(x), std::end(x),
std::back_inserter(strID));

关于C++ std::copy 结果不同于字符串构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38889615/

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