string 类的常见用法
  

  #include <bits/stdc++.h>
  using namespace std;
  
  int main() {
  string s; // vector<char> s
  cin >> s;
  getline(cin, s);
  cout << s << endl;
  for (char c : s) {
  cout << c;
  }
  cout << endl;
  cout << s.size() << endl;
  s.push_back('S');
  cout << s << endl;
  s.pop_back();
  cout << s << endl;
  cout << s.front() << endl;
  cout << s.back() << endl;
  s += "OK";
  cout << s << endl;
  sort(s.begin(), s.end());
  cout << s << endl;
  reverse(s.begin(), s.end());
  cout << s << endl;
  s.insert(s.begin() + 2, 'K'); // 插入字符,注意用迭代器定位
  cout << s << endl;
  s.erase(s.begin() + 3);
  cout << s << endl;
  s.clear(); // 清空
  cout << "size = " << s.size() << endl;
  cout << "empty = " << s.empty() << endl; // 判断是否为空
  cout << s.substr(6, 5) << endl; // 返回子串,注意用下标定位
  
  int n = 12345;
  string s = to_string(n); // 整型转字符串
  cout << s << endl;
  double db = 12.345;
  s = to_string(db); // 浮点型转字符串
  cout << s << endl;
  s.pop_back();
  s.pop_back();
  s.pop_back();
  s.erase(s.begin() + 3, s.begin() + 3 + 3); // 删除
  cout << s << endl;
  
  string s = "12";
  int n = stoi(s); // 字符串转整型,注意 atoi 已失效
  cout << n * n << endl;
  
  string s = "12.345";
  double db = stod(s); // 字符串转浮点型
  cout << db << endl;
  
  string s = "hello world"; //llo -> 110
  for (int i = 0; i < s.size(); i++) {
  if (s[i] == 'w') {
  cout << "find" << endl;
  break;
  }
  }
  // Box::get()
  if (s.find("werewrt") == string::npos) { // 查找
  cout << "not find" << endl;
  } else {
  cout << "find" << endl;
  }
  
  s.erase(s.begin() + 2, s.begin() + 2 + 3); // 删除
  cout << s << endl;
  s.insert(2, "110"); // 插入字符串,注意用下标索引
  cout << s << endl;
  
  s.replace(2, 3, "110110"); // 替换
  cout << s << endl;
  
  // 字符数组转换 string类
  char arr[6] = {'h', 'e', 'l', 'l', 'o', '\0'}  ;
  string s(arr);
  string s = arr;
  cout << s << endl;
  
  // string 类转换 字符数组
  string s = "hello world";
  char arr[100];
  memset(arr, 0, sizeof(arr));
  strcpy(arr, s.c_str()); // 返回以'\0'结尾的字符数组,优先使用
  strcpy(arr, s.data()); // 返回 字符数组,不添加 '\0'
  cout << arr << endl;
  
  return 0;
  }
  
  ## vector 向量 的 常见用法

  #include <bits/stdc++.h>
  using namespace std;
  
  int main() {
  
  	int n;
  	cin >> n;
  	vector<int> vec(n);
  	for (int i = 0; i < n; i++) {
  		cin >> vec[i];	
  	} 
  	sort(vec.begin(), vec.end());
  	vec.insert(vec.begin() + 2, 1000);
  
  	vector<int> vec1 = {10, 20, 30, 40, 50};
  	vector<int> vec2 = {100, 200, 300};
  	for (auto num : vec1) {
  		cout << num << " ";
  	}
  	cout << endl;
  	cout << vec1.size() << endl;
  	for (auto num : vec2) {
  		cout << num << " ";
  	}		
  	cout << endl;
  	cout << vec2.size() << endl;
  	vec1.clear();
  	vec.erase(vec.begin() + 3); // 删除,迭代器定位
      vec.erase(find(vec.begin(), vec.end(), 30)); // 查找位置并删除
  	for (int i = 0; i < n; i++) {
  		cout << vec[i] << " ";
  	}
      // 数组转换成向量
  	int arr[] = {10, 20, 50, 40, 30};
  	vector<int> vec(arr, arr + 5);
  	for (auto num : vec) {
  		cout << num << " ";
  	}
  	cout << endl;
  	vec.push_back(100); // 添加末尾元素 
  	for (auto num : vec) {
  		cout << num << " ";
  	}	
  	cout << endl;
  	vec.pop_back(); // 删除末尾元素 
  	sort(vec.begin(),  vec.end()); // 排序 
  	for (auto num : vec) {
  		cout << num << " ";
  	}	
  	cout << endl;
  	reverse(vec.begin(), vec.end()); // 反转 
  	for (auto num : vec) {
  		cout << num << " ";
  	}	
  	cout << endl;
  	cout << vec.front() << endl; // 起始元素 
  	cout << vec.back() << endl; // 末尾元素 
  	vec.clear(); // 清空 
  	cout << "size = " << vec.size() << endl; // 返回个数 
  	cout << "empty = " << vec.empty() << endl; // 判断为空 
  
  	// 向量转换为数组 
  	vector<int> vec = {10, 20, 30, 40, 50};
  	int arr[10];
  	memcpy(arr, &vec[0], vec.size() * sizeof(int)) ;
  
  	for (int i = 0; i < vec.size(); i++) {
  		cout << arr[i] << " ";
  	}
  
      // TDP1104 读取方式
  	int num;
  	vector<int> nums;
  	while (cin >> num) nums.push_back(num);
  
  	// TDP1109 读取方式
  	int num, target;
  	vector<int> nums;
  	while (cin >> num) {
  	    nums.push_back(num);
  	    char ch = getchar();
  	    if (ch == '\n') break;
  	}
  	cin >> target;
  
  	// 二维向量用法 
  	vector<vector<int>> vecvec;
  	vector<int> vec = {10, 20, 30};
  	vecvec.push_back(vec);
  	vecvec.push_back(vec);
  	vecvec.push_back(vec);
  	for (auto vec : vecvec) {
  		for (auto num : vec) {
  			cout << num << " ";
  		}
  		cout << endl;
  	}
  
  	return 0;
  }
  
  ## 简洁高效的 string 类
  
  ```cpp
  #include <bits/stdc++.h>
  using namespace std;
  int main() {
  
  	string s1, s2;
  	cin >> s1 >> s2;
  
  	// 字符串拼接
  	cout << s1 + s2 << endl; 
  
  	// 字符串复制
  	s1 = s2;
  	cout << s1 << endl;
  
  	// 字符串比较 
  	cout << (s1 < s2 ? "<" : ">=") << endl;
  
  	return 0;
  }