本文共 2493 字,大约阅读时间需要 8 分钟。
使用string类
string类对每个关系运算符都做了重载 并且都以三种方式被重载:
string 与string
string与c-string
c-string 与 string
用心, 赞!
size()和length()都能够返回字符串中的字符数 效果一样
find()
string类的内存分配原理
程序示例
#include#include int main(){ using namespace std; string empty; string small = "bit"; string larger = "Elephants are a girl's best friend"; cout << "Sizes:\n"; cout << "\tempty: " << empty.size() << endl; cout << "\tsmall: " << small.size() << endl; cout << "\tlarger: " << larger.size() << endl; cout << "Capacities:\n";// 查看string对象分配的内存大小 cout << "\tempty: " << empty.capacity() << endl; cout << "\tsmall: " << small.capacity() << endl; cout << "\tlarger: " << larger.capacity() << endl;// 手动设置string对象的内存大小 empty.reserve(50); cout << "Capacity after empty.reserve(50): " << empty.capacity() << endl; return 0;}
运行结果
通过c_str()函数能够将string转换成c风格字符串 返回指向该字符串的指针。
string种类
只能指针模板类
有3种
auto_ptr
unique_ptr
shared_ptr
智能指针模板包含在memory头文件中
示例:
#include#include #include class Report{ private: std::string str; public: Report(const std::string s) : str(s) { std::cout << "Object created!\n";} ~Report() {std::cout << "Object deleted!\n";} void comment() const {std::cout << str << "\n";}};int main(){ // 我这里的编译器表示木有这货 估计被移除了 // { // std::auto_ptr ps (new Report("using auto_ptr")); // ps->comment(); // } { std::shared_ptr ps (new Report("using shared_ptr")); ps->comment(); } { std::unique_ptr ps (new Report ("using unique_ptr")); ps->comment(); } return 0;}
不要把非堆内存丢到智能指针中去
shared_ptr:策略
示例:
#include#include #include int main(){ using namespace std; shared_ptr films[5] = { shared_ptr (new string("Fowl Balls")), shared_ptr (new string("Duck Walks")), shared_ptr (new string("Chicken Runs")), shared_ptr (new string("Turkey Errors")), shared_ptr (new string("Goose Eggs")) }; shared_ptr pwin; pwin = films[2]; cout << "The nominees for best avian baseball film are\n"; for (int i = 0; i < 5; i++) cout << *films[i] << endl; cout << "The winner is " <<*pwin << "!\n"; cin.get(); return 0;}
运行结果
unique_ptr
两个智能指针指向同一个对象的时候 unique_ptr会在编译的时候就报错 而不是在运行阶段
但unique_ptr允许悬挂指针的存在
感觉unique_ptr很费劲 不用悬挂指针吧 用 move()
new[] 的话 使用unique_ptr<>
new 的话 使用 shared_ptr<>, unique_ptr<>
不是new的话 那就再见
如何选择智能指针
建议用shared_ptr<>的场景
建议使用uniqure_ptr<>的场景
uniqre_ptr可以转换成shared_ptr
完结
转载地址:http://siepi.baihongyu.com/