第16章-cpp string类和标准模板库

本文介绍了C++标准库中string类的基础构造与操作,如移动构造函数、initializer_list的使用,以及重点讲解了C++11新增的特性,如string类的输入、模板auto_ptr、unique_ptr和shared_ptr的介绍,以及标准模板库(STL)中的容器、迭代器、函数对象和常用算法。深入理解这些内容对于高效利用C++进行编程至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本章内容包括:

  • 标准C++string类
  • 模板auto_ptr、unique_ptr和shared_ptr
  • 标准模板库(STL)
  • 容器类
  • 迭代器
  • 函数对象(functor)
  • STL算法
  • 模板initializer_list

一、string类

构造字符串
使用构造函数时都进行了简化,即隐藏了这样一个事实:string实际上是模板具体化basic_string<char>的一个typedef,同时省略了与内存管理相关的参数(这将在本章后面和附录F中讨论)。size_t是一个依赖于实现的整型,是在头文件string中定义的。string类将静态成员常量string::npos定义为字符串的最大长度。

关于npos
static const size_t npos = -1;
npos是一个静态成员常量值,是size_t类型的元素的最大可能值。
当该值用作字符串成员函数中参数的值时,表示“直到字符串结束”。
作为返回值,它通常用于指示不匹配。
该常量的定义值为-1,因为size_t是无符号整数类型,所以它是该类型的最大可能表示值。

// str1.cpp -- introducing the string class
#include <iostream>
#include <string>
// using string constructors
int main() {
    using namespace std;
    string one("Lottery Winner!");     // ctor #1  (注:ctor是constructor的缩写)
    cout << one << endl;               // overloaded <<
    string two(20, '$');               // ctor #2
    cout << two << endl;
    string three(one);                 // ctor #3
    cout << three << endl;
    one += " Oops!";                   // overloaded +=
    cout << one << endl;
    two = "Sorry! That was ";
    three[0] = 'P';                    // overloaded []
    string four;                       // ctor #4
    four = two + three;                // overloaded +, =
    cout << four << endl;
    char alls[] = "All's well that ends well";
    string five(alls, 20);              // ctor #5
    cout << five << "!\n";
    string six(alls+6, alls + 10);     // ctor #6
    cout << six  << ", ";
    string seven(&five[6], &five[10]); // ctor #6 again
    cout << seven << "...\n";
    string eight(four, 7, 16);         // ctor #7
    cout << eight << " in motion!" << endl;
    // std::cin.get();
    return 0; 
}
Lottery Winner!
$$$$$$$$$$$$$$$$$$$$
Lottery Winner!
Lottery Winner! Oops!
Sorry! That was Pottery Winner!
All's well that ends!
well, well...
That was Pottery in motion!

C++11新增的构造函数
构造函数string(string&& str)类似于复制构造函数,导致新创建的string为str的副本。但与复制构造函数不同的是,它不保证将str视为const。这种构造函数被称为移动构造函数(move constructor)。在有些情况下,编译器可使用它而不是复制构造函数,以优化性能。第18章的“移动语义和右值引用”一节将讨论这个主题。

构造函数string(initializer_list<char> il)让您能够将列表初始化语法用于string类。也就是说,它使得下面这样的声明是合法的:

string piano_man = {'L', 'i', 's', 'z', 't'};
string comp_lang {'L', 'i', 's', 'p'};

string类输入
未完待续。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值