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 異常。

另見