成员类型 | 描述 |
---|---|
构造函数 | 构造字符串对象 |
析构函数 | 字符串析构函数 |
赋值构造函数 | 字符串赋值 |
std::string::string
c++98
//default (1)
string();
//copy (2)
string (const string& str);
//substring (3)
string (const string& str, size_t pos, size_t len = npos);
//from c-string (4)
string (const char* s);
//from sequence (5)
string (const char* s, size_t n);
//fill (6)
string (size_t n, char c);
//range (7)
template <class InputIterator>
string (InputIterator first, InputIterator last);
c++11
//default (1)
string();
//copy (2)
string (const string& str);
//substring (3)
string (const string& str, size_t pos, size_t len = npos);
//from c-string (4)
string (const char* s);
//from buffer (5)
string (const char* s, size_t n);
//fill (6)
string (size_t n, char c);
//range (7)
template <class InputIterator>
string (InputIterator first, InputIterator last);
//initializer list (8)
string (initializer_list<char> il);
//move (9)
string (string&& str) noexcept;
参数构造字符串对象
构造一个字符串对象,根据使用的构造函数版本初始化它的值:
(1) empty string constructor (default constructor)
构造一个长度为零字符的空字符串。
(2) copy constructor
构造str的副本。
(3) substring constructor
复制str的从字符位置pos开始并跨越len个字符的部分(或者直到 str 的结尾,如果str太短或len是string::npos)。
(4) from c-string
复制s指向的以 null 结尾的字符序列(C 字符串)。
(5) from buffer
从s指向的字符数组中复制前n 个字符。
(6) fill constructor
用字符c的n个连续副本填充字符串。
(7) range constructor
以相同的顺序复制[first,last)范围内的字符序列。
(8) initializer list
以相同的顺序复制il中的每个字符。
(9) move constructor
获取str的内容。
str处于未指定但有效的状态。
上面的所有构造函数都支持成员类型allocator_type的对象作为末尾的附加可选参数,这与字符串无关(上面未显示,请参阅basic_string 的构造函数以获取完整签名)。
例子str
另一个字符串对象,其值要么被复制,要么被获取。
pos
str中作为子字符串复制到对象的第一个字符的位置。
如果这大于str的长度,则抛出out_of_range。
注意:str中的第一个字符由值0(不是1)表示。
len
要复制的子字符串的长度(如果字符串较短,则复制尽可能多的字符)。string::npos的值表示直到str结束的所有字符。
s
指向字符数组的指针(例如c-string)。
n
要复制的字符数。
c
用于填充字符串的字符。字符串中的n 个字符中的每一个都将被初始化为该值的副本
first, last
输入迭代器到范围内的初始和最终位置。使用的范围是[first,last),其中包括first和last之间的所有字符,包括first指向的字符,但不包括 last 指向的字符。
函数模板参数InputIterator应该是一个输入迭代器类型,它指向可转换为char类型的元素。
如果InputIterator是整数类型,则将参数转换为正确的类型,以便使用签名 (5) 代替。
il
一个initializer_list对象。
这些对象是从初始化列表声明器自动构造的。
size_t是无符号整数类型。
// string constructor
#include
#include
int main()
{
std::string s0("Initial string");
// constructors used in the same order as described above:
std::string s1;
std::string s2(s0);
std::string s3(s0, 8, 3);
std::string s4("A character sequence");
std::string s5("Another character sequence", 12);
std::string s6a(10, 'x');
std::string s6b(10, 42); // 42 is the ASCII code for '*'
std::string s7(s0.begin(), s0.begin() + 7);
std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;
std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a;
std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n';
return 0;
}
输出:
s1:
s2: Initial string
s3: str
s4: A character sequence
s5: Another char
s6a: xxxxxxxxxx
s6b: **********
s7: Initial
迭代器有效性
数据竞争移动构造函数 (9)可能会使与str相关 的迭代器、指针和引用无效。
异常安全移动构造函数 (9)修改str。
析构函数没有分配器参数 (9, first) 的移动构造函数从不抛出异常(不抛出保证)。
在所有其他情况下,如果抛出异常,则不会产生任何影响(强烈保证)。
如果 s 是空指针,如果 n == npos,或者 [first,last) 指定的范围无效,则会导致未定义的行为。
如果 pos 大于 str 的长度,则抛出 out_of_range 异常。
如果 n 大于 s 指向的数组,则会导致未定义的行为。
如果生成的字符串长度超过 max_size,则会引发 length_error 异常。
如果函数在尝试分配存储时失败,则会引发 bad_alloc 异常。
std::string::~string
~string();
迭代器有效性字符串析构函数
销毁字符串对象。这将使用其分配器释放字符串分配的所有存储容量。
数据竞争所有迭代器、指针和引用都无效。
异常安全所有迭代器、指针和引用都无效。
不抛出保证:从不抛出异常。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)