带你玩转std::string类

带你玩转std::string类,第1张

成员
成员返回值
begin返回迭代器头部
end返回迭代器尾部
rbegin返回反向迭代器头部
rend返回反向迭代器尾部
cbegin将 const_iterator 返回到头部
cend将 const_iterator 返回到尾部
crbegin将 const_reverse_iterator 返回到反向头部
crend将 const_reverse_iterator 返回到反向尾部
begin

公共成员函数

std::string::begin

c++98

iterator begin();
const_iterator begin() const;

c++11

iterator begin() noexcept;
const_iterator begin() const noexcept;

将迭代器返回到开头
返回一个指向字符串第一个字符的迭代器。

参数

返回值

指向字符串开头的迭代器。
如果字符串对象是 const 限定的,则该函数返回一个const_iterator。否则,它返回一个迭代器。
成员类型iterator和const_iterator是随机访问迭代器类型(分别指向一个字符和一个 const 字符)。

例子
// string::begin/end
#include 
#include 

int main ()
{
  std::string str ("Test string");
  for ( std::string::iterator it=str.begin(); it!=str.end(); ++it)
    std::cout << *it;
  std::cout << '\n';

  return 0;
}

输出:

Test string
迭代器有效性

一般来说,没有变化。
在某些实现中,非常量版本可能会在对象被构造或修改后第一次访问字符串字符时使所有迭代器、指针和引用无效。

数据竞争

对象被访问,并且在某些实现中,非常量版本在对象被构造或修改后第一次访问字符串字符时修改它。
返回的迭代器可用于访问或修改字符。

异常安全

不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

end

公共成员函数

std::string::begin

c++98

iterator end();
const_iterator end() const;

c++11

iterator end() noexcept;
const_iterator end() const noexcept;

返回迭代器到结束
返回一个指向字符串末尾字符的迭代器。过去
字符是一个理论上 的字符,它将跟在字符串中的最后一个字符之后。它不应被取消引用。 由于标准库函数使用的范围不包括其结束迭代器所指向的元素,因此该函数通常与string::begin结合使用,以指定包含字符串中所有字符的范围。 如果对象是空字符串,则此函数返回与string::begin相同的值。

参数

返回值

指向字符串末尾的迭代器。
如果字符串对象是 const 限定的,则该函数返回一个const_iterator。否则,它返回一个迭代器。
成员类型iterator和const_iterator是随机访问迭代器类型(分别指向一个字符和一个 const 字符)。

例子
// string::begin/end
#include 
#include 

int main ()
{
  std::string str ("Test string");
  for ( std::string::iterator it=str.begin(); it!=str.end(); ++it)
    std::cout << *it;
  std::cout << '\n';

  return 0;
}

输出:

Test string
迭代器有效性

没有变化。

数据竞争

对象被访问(const 和非 const 版本都不会修改它)。
返回的迭代器可用于访问或修改字符。同时访问或修改不同的字符是安全的。

异常安全

不不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

rbegin

公共成员函数

std::string::begin

c++98

reverse_iterator rbegin();
const_reverse_iterator rbegin() const;

c++11

reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;

将反向迭代器返回到反向开始
返回一个反向迭代器,指向字符串的最后一个字符(即它的反向开始)。
反向迭代器向后迭代:增加它们会将它们移向字符串的开头。
rbegin指向成员end指向的字符之前的字符。

参数

返回值

指向字符串反向开头的 反向迭代器。
如果字符串对象是 const 限定的,则该函数返回一个const_iterator。否则,它返回一个迭代器。
成员类型reverse_iterator和const_reverse_iterator是反向随机访问迭代器类型(分别指向一个字符和一个 const 字符)。

例子
// string::rbegin/rend
#include 
#include 

int main ()
{
  std::string str ("now step live...");
  for (std::string::reverse_iterator rit=str.rbegin(); rit!=str.rend(); ++rit)
    std::cout << *rit;
  return 0;
}

此代码使用在rbegin和rend 之间迭代的反向迭代器逐个字符打印出字符串的反向内容。请注意,即使增加了反向迭代器,迭代也会向后遍历字符串(这是反向迭代器的一个特性)。
实际输出为:

...evil pets won
迭代器有效性

没有变化。

数据竞争

对象被访问(const 和非 const 版本都不会修改它)。
返回的迭代器可用于访问或修改字符。同时访问或修改不同的字符是安全的。

异常安全

不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

rend

公共成员函数

std::string::rend

c++98

reverse_iterator rend();
const_reverse_iterator rend() const;

c++11

reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;

将迭代器返回到开头
返回一个指向字符串第一个字符的迭代器。

参数

返回值

指向字符串反向端的 反向迭代器。
如果字符串对象是 const 限定的,则该函数返回一个const_iterator。否则,它返回一个迭代器。
成员类型reverse_iterator和const_reverse_iterator是反向随机访问迭代器类型(分别指向一个字符和一个 const 字符)。

例子
// string::rbegin/rend
#include 
#include 

int main ()
{
  std::string str ("now step live...");
  for (std::string::reverse_iterator rit=str.rbegin(); rit!=str.rend(); ++rit)
    std::cout << *rit;
  return 0;
}

此代码使用在rbegin和rend 之间迭代的反向迭代器逐个字符打印出字符串的反向内容。请注意,即使增加了反向迭代器,迭代也会向后遍历字符串(这是反向迭代器的一个特性)。
实际输出为:

...evil pets won
迭代器有效性
没有变化。
数据竞争

对象被访问(const 和非 const 版本都不会修改它)。
返回的迭代器可用于访问或修改字符。同时访问或修改不同的字符是安全的。

异常安全

不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

cbegin

公共成员函数

std::string::cbegin 

c++11

const_iterator cbegin() const noexcept;

将 const_iterator 返回到开头
返回指向字符串第一个字符的const_iterator 。const_iterator是 一个指向 const 内容的迭代器。这个迭代器可以增加和减少(除非它本身也是 const),就像string::begin返回的迭代器一样,但它不能用来修改它指向的内容,即使字符串对象本身不是 const。

参数

返回值

字符串开头的 const_iterator 。
成员类型const_iterator是指向 const 字符的随机访问迭代器类型。

例子
// string::cbegin/cend
#include 
#include 

int main ()
{
  std::string str ("Lorem ipsum");
  for (auto it=str.cbegin(); it!=str.cend(); ++it)
    std::cout << *it;
  std::cout << '\n';

  return 0;
}

输出:

Lorem ipsum
迭代器有效性

没有变化。

数据竞争

对象被访问。

异常安全

不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

cend

公共成员函数

std::string::cend

c++11

const_iterator cend() const noexcept;

返回 const_iterator 结束
返回一个指向字符串末尾字符的const_iterator 。const_iterator是 一个指向 const 内容的迭代器。这个迭代器可以增加和减少(除非它本身也是 const),就像string::end返回的迭代器一样,但它不能用于修改它指向的内容,即使字符串对象本身不是 const。 如果对象是空字符串,则此函数返回与string::cbegin相同的值。 返回的值不应被取消引用。

参数

返回值

字符串末尾的 const_iterator 。
成员类型const_iterator是指向 const 字符的随机访问迭代器类型。

例子
// string::cbegin/cend
#include 
#include 

int main ()
{
  std::string str ("Lorem ipsum");
  for (auto it=str.cbegin(); it!=str.cend(); ++it)
    std::cout << *it;
  std::cout << '\n';

  return 0;
}

输出:

Lorem ipsum
迭代器有效性

没有变化。

数据竞争

对象被访问。

异常安全

不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

crbegin

公共成员函数

std::string::crbegin

c++11

const_reverse_iterator crbegin() const noexcept;

将 const_reverse_iterator 返回到反向开始
返回一个const_reverse_iterator指向字符串的最后一个字符(即它的反向开始)。

参数

返回值

字符串反向开头 的const_reverse_iterator。 成员类型const_reverse_iterator是一种反向随机访问迭代器类型,它指向一个 const 字符。

例子
// string::crbegin/crend
#include 
#include 

int main ()
{
  std::string str ("lorem ipsum");
  for (auto rit=str.crbegin(); rit!=str.crend(); ++rit)
    std::cout << *rit;
  std::cout << '\n';

  return 0;
}

输出:

muspi merol
迭代器有效性

没有变化。

数据竞争

对象被访问。

异常安全

不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

crend

公共成员函数

std::string::crend

c++11

const_reverse_iterator crend() const noexcept;

将 const_reverse_iterator 返回到反向端
返回一个const_reverse_iterator指向字符串第一个字符之前的理论字符(被认为是它的反向端)。

参数

返回值

字符串反向端 的const_reverse_iterator。 成员类型const_reverse_iterator是一种反向随机访问迭代器类型,它指向一个 const 字符。

例子
// string::crbegin/crend
#include 
#include 

int main ()
{
  std::string str ("lorem ipsum");
  for (auto rit=str.crbegin(); rit!=str.crend(); ++rit)
    std::cout << *rit;
  std::cout << '\n';

  return 0;
}

输出:

muspi merol
迭代器有效性

没有变化。

数据竞争

对象被访问。

异常安全

不抛出保证:这个成员函数从不抛出异常。
返回的迭代器的复制构造或赋值也保证不会抛出。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/676167.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-19
下一篇2022-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存