c++ std::复制结果不同于字符串构造函数
C++ std::copy result different from string constructor
我在使用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));
M说:副本写越界strID
(copy
不调整目标大小)。您可以使用std::back_inserter(strID)
作为第三个参数。std:: back_inserter
相关文章:
- 在c++构造函数中使用随机字符串生成器
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- C 字符串在显式构造函数中分配值C++?
- 我用字符串做了一个C++构造函数,但它不会打印出字符串
- C++继承:构造函数中的字符串构造
- 在派生自线程类的构造函数中传递字符串
- 性能 - 使用字符串构造函数与使用串联
- 字符串构造函数将两个字符* 放入另一个 std::string 在 C++14 中有效,但不适用于 C++17
- 调用哪个字符串构造函数
- 使用子字符串构造函数构建字符串 - 调试 - 当自动跳过代码时
- 使用字符串构造函数从wstring转换为字符串时,是否没有可能的数据丢失
- 不分配任何字符内存的常量字符串构造函数?
- 常量 char* 的字符串构造函数更改常量 char* 的值
- 为什么从std::string的initializer列表中填充std::向量不会调用std::字符串构造函数
- 为什么 C++03 文件流不接受字符串构造函数参数?
- 带有char*内存泄漏的字符串构造函数
- BigNum类字符串构造函数错误
- CPP字符串构造函数查找并附加空字符
- c++的字符串构造函数
- c++ std::复制结果不同于字符串构造函数