public member function
<string>

std::string::assign

string (1)
string& assign (const string& str);
substring (2)
string& assign (const string& str, size_t subpos, size_t sublen);
c-string (3)
string& assign (const char* s);
buffer (4)
string& assign (const char* s, size_t n);
fill (5)
string& assign (size_t n, char c);
range (6)
template <class InputIterator>   string& assign (InputIterator first, InputIterator last);
string (1)
string& assign (const string& str);
substring (2)
string& assign (const string& str, size_t subpos, size_t sublen);
c-string (3)
string& assign (const char* s);
buffer (4)
string& assign (const char* s, size_t n);
fill (5)
string& assign (size_t n, char c);
range (6)
template <class InputIterator>   string& assign (InputIterator first, InputIterator last);
initializer list(7)
string& assign (initializer_list<char> il);
move (8)
string& assign (string&& str) noexcept;
string (1)
string& assign (const string& str);
substring (2)
string& assign (const string& str, size_t subpos, size_t sublen = npos);
c-string (3)
string& assign (const char* s);
buffer (4)
string& assign (const char* s, size_t n);
fill (5)
string& assign (size_t n, char c);
range (6)
template <class InputIterator>   string& assign (InputIterator first, InputIterator last);
initializer list(7)
string& assign (initializer_list<char> il);
move (8)
string& assign (string&& str) noexcept;
将内容赋值给字符串
将新值赋给字符串,替换其当前内容。

(1) string
复制 *str*。
(2) substring
复制从 *str* 的字符位置 *subpos* 开始,跨越 *sublen* 个字符的部分(或者直到 *str* 的末尾,如果 *str* 太短或者 *sublen* 是 string::npos)。
(3) c-string
复制 *s* 指向的空终止字符序列(C 字符串)。
(4) buffer
从 *s* 指向的字符数组中复制前 *n* 个字符。
(5) fill
用 *n* 个字符 *c* 的连续副本替换当前值。
(6) range
复制范围内的字符序列[first,last),以相同的顺序。
(7) 初始化列表
按相同顺序复制 *il* 中的每个字符。
(8) move
获取 *str* 的内容。
str 处于未指定但有效的状态。

参数

str
另一个 string 对象,其值被复制或移动。
subpos
str 中作为子字符串复制到对象的第一个字符的位置。
如果它大于strlength,则会抛出out_of_range
注意:str中的第一个字符用值表示0(不是1).
sublen
要复制的子字符串的长度(如果字符串较短,则会复制尽可能多的字符)。
string::npos 指示直到 *str* 末尾的所有字符。
s
指向字符数组的指针(例如c-string)。
n
要复制的字符数。
c
字符值,重复 *n* 次。
first, last
指向范围内初始位置和最终位置的输入迭代器。 使用的范围是[first,last),其中包括firstlast之间的所有字符,包括first指向的字符,但不包括last指向的字符。
函数模板参数InputIterator应为指向可转换为char.
如果已知InputIterator是一种整数类型,参数被强制转换为适当的类型,以便使用签名 (5) 代替。
il
il
这些对象是从初始化列表声明符自动构造的。

size_t 是一个无符号整数类型。

返回值

*this

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// string::assign
#include <iostream>
#include <string>

int main ()
{
  std::string str;
  std::string base="The quick brown fox jumps over a lazy dog.";

  // used in the same order as described above:

  str.assign(base);
  std::cout << str << '\n';

  str.assign(base,10,9);
  std::cout << str << '\n';         // "brown fox"

  str.assign("pangrams are cool",7);
  std::cout << str << '\n';         // "pangram"

  str.assign("c-string");
  std::cout << str << '\n';         // "c-string"

  str.assign(10,'*');
  std::cout << str << '\n';         // "**********"

  str.assign<int>(10,0x2D);
  std::cout << str << '\n';         // "----------"

  str.assign(base.begin()+16,base.end()-12);
  std::cout << str << '\n';         // "fox jumps over"

  return 0;
}

输出
The quick brown fox jumps over a lazy dog.
brown fox
pangram
c-string
**********
----------
fox jumps over


复杂度

未指定。
未指定,但通常与新的 字符串长度 成线性关系(对于移动版本是常量)。

迭代器有效性

与此对象相关的任何迭代器、指针和引用都可能失效。

数据竞争

对象被修改。
移动赋值形式 (8) 修改 str

异常安全

对于移动赋值(8),该函数不会引发异常(无异常保证)。
在所有其他情况下,如果抛出异常,则不会产生任何影响(强保证)。

如果已知s没有指向足够长的数组,或者如果指定的范围是[first,last)无效,则会导致未定义行为

如果 subpos 大于 str长度,则会抛出 out_of_range 异常。
如果生成的 字符串长度 将超过 max_size,则会抛出 length_error 异常。
如果函数需要分配存储空间但失败,则会抛出 bad_alloc 异常。

另见