在C ++中初始化字符串

adrian008

嗨,我有一个简单的C ++程序。

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    string s = "Rotate this";
    rotate(s.begin(),s.begin()+6,s.end());
    cout<<s<<endl;
    string s1;
    rotate_copy(s.begin(),s.begin()+4,s.end(),s1.begin());
    cout<<s1<<endl;

}

该程序失败(运行时错误),因为s1.begin()迭代器未指向任何内容。如何初始化s1字符串,使其为空并s.begin()可以使用?

我知道reserve可以使用,即程序使用

   string s1;

   s1.reserve(1); 

但我想必须有其他方法可以解决这个问题。

来自莫斯科的弗拉德

首先,您应该包含标题 <string>

#include <string>

因此,s1您应该为其保留与大小相等的内存,s并使用标准的迭代器适配器std::back_insert_ietrator

例如

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

int main()
{
    std::string s = "Rotate this";

    std::rotate( s.begin(), std::next( s.begin(), 6 ), s.end() );

    std::cout << s << std::endl;

    std::string s1;
    s1.reserve( s.size() );

    std::rotate_copy( s.begin(), std::next( s.begin(), 4 ), s.end(),
                      std::back_inserter( s1 ) );

    std::cout << s1 << std::endl;
}

程序输出为

 thisRotate
sRotate thi

至于你的声明

我知道可以使用储备金,即程序可以使用

string s1;
s1.reserve(1);

那是错误的。该算法的调用将具有未定义的行为,因为s1还没有元素,并且您可能未取消引用迭代器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C中动态初始化字符串数组

C 字符串中的无效初始化程序

字符数组的初始化字符串太长C

如何从包含C#中的键值对的字符串中初始化对象

如何在C ++(G ++)中的Class中初始化字符串

未初始化的C字符串无警告

C字符串指针初始化自己然后取消初始化自己?

在C中定义和初始化字符串数组

如何在C#中初始化字符串数组列表?

如何在ONE GO AFTER声明中初始化字符串数组?C#

在现代C ++中初始化字符串的方式是否有所不同?

c++中初始化空字符串的专业方法

如何最好地初始化C ++中的字符串向量?

在C#中具有复杂初始化的静态字符串变量

是否有必要在C ++中初始化字符串?

在C(keil v5)Uvision中按字符串初始化枚举

如何使用 Partial 类 WPF C# 中的控件初始化字符串变量?

用字符串初始化的C中的静态char数组

初始化由C中的枚举索引的字符串数组

在c中初始化字符串数组的不同方法

在 C++ 中初始化字符串向量的向量

在C ++中初始化静态字符串成员

零初始化字符串和字符串数组(C ++)

使用字符串文字傳遞二維字符數組而不在c中初始化

标记化C ++中的“带括号的初始化程序列表”样式的字符串(使用Boost?)

C:初始化字符指针(字符串)数组,并使用fgets在文件中迭代以将值放入这些字符串中

在C ++中,用字符串文字初始化char数组是一个好习惯吗?

在C#中,我应该使用string.Empty还是String.Empty或“”来初始化字符串?

在c ++中,这两个不同的字符串初始化之间有什么区别?