【问题标题】:Why cant I use std::copy with std::string to another std::string? [duplicate]为什么我不能将 std::copy 与 std::string 一起使用到另一个 std::string? [复制]
【发布时间】:2020-12-05 19:15:24
【问题描述】:

以下代码打印一个空字符串,我无法理解为什么会这样?

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
    std::string s="hello";
    std::string r;
    std::copy(s.rbegin(),s.rend(), r.begin());
    std::cout<<r;
    return 0;
}

【问题讨论】:

  • 不,我不想复制到字符向量。我正在考虑将字符串复制到另一个字符串。我知道其他字符串复制机制,但我希望这也能正常工作。
  • std::copy 不分配内存。你有调整容器的大小。你可以std::string r(s.length(), '\0');
  • 因为r是空的,唯一可以复制到空字符串中的就是另一个空字符串。 r=s; 对您不起作用有什么具体原因吗?
  • std::string 还有一个使用迭代器的构造函数。你可以通过std::string r(s.rbegin(), s.rend()); 来获得这个效果,绕过std::copy
  • @sam varshachik 我这样做更多是为了学习

标签: c++


【解决方案1】:

问题是r 是一个空的std::string,它不包含chars。 std::copy 正在尝试复制分配 chars,因为 r.begin() 导致 UB。

你可以提前让r包含5个元素。

std::string r(5, '\0');

或者

std::string r;
r.resize(5);

或使用std::back_inserter

std::string r;
std::copy(s.rbegin(),s.rend(), std::back_inserter(r));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2018-11-08
    • 2015-09-15
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多