• cpp primer plus笔记012-STL模板库


    1. string类的构造函数:
      #include
      #include
      int main()
      {
      	std::string str1 = std::string("123");
      	std::string str2 = std::string(5, '4');
      	std::string str3 = std::string(str2);
      	std::string str4 = std::string();
      	std::string str5 = std::string("234234", 2);
      	std::string str6 = std::string("23", 3);
      	std::string str7 = std::string(str1.begin() + 1, str1.end());
      	std::string str8 = std::string(str2, 2);
      	std::string str9 = std::string(str2, 2, 2);
      	//std::string(std::string&& str)noexcept
      	//std::string(initializer_list il)
      	char ch[5] = "1234";
      	std::string str10 = std::string(ch);
      	std::cout << str1 << std::endl;
      	std::cout << str2 << std::endl;
      	std::cout << str3 << std::endl;
      	std::cout << str4 << std::endl;
      	std::cout << str5 << std::endl;
      	std::cout << str6 << std::endl;
      	std::cout << str7 << std::endl;
      	std::cout << str8 << std::endl;
      	std::cout << str9 << std::endl;
      	std::cout << str10 << std::endl;
      }
      
      • 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
      123
      44444
      44444
      
      23
      23
      23
      444
      44
      1234
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    2. string的find函数方法:
      #include
      #include
      int main()
      {
      	std::string str = "2342342342356";
      	std::string temp = "2342";
      	std::cout << str.find("56", 2) << std::endl;
      	std::cout << str.find("56") << std::endl;
      	std::cout << str.find("89") << std::endl;
      	std::cout << str.find(temp, 2) << std::endl;
      	std::cout << str.find(temp) << std::endl;
      	std::cout << str.find(temp + '0') << std::endl;
      	std::cout << str.find("345", 3, 2) << std::endl;
      	std::cout <<"npos = " << std::string::npos << std::endl;
      	std::cout << str.find("345", 3) << std::endl;
      	std::cout << str.find("2", 2) << std::endl;
      	unsigned long long ans = std::string::npos;
      	int cnt = 0;
      	while (ans)
      	{
      		ans /= 2;
      		++cnt;
      	}
      	std::cout << cnt << std::endl;
      }
      
      • 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
      11
      11
      18446744073709551615
      3
      0
      18446744073709551615
      4
      npos = 18446744073709551615
      18446744073709551615
      3
      64
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    3. 智能指针与常规指针的区别是一旦程序运行离开了代码块,智能指针将自动的释放指向的内存,因此new的时候不需要delete语句,注:智能化指针初始化不能直接被赋值数据的地址,只能被赋值为在堆内存的地址,因为智能指针在释放内存时会调用delete运算符。
      #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 << std::endl;
      	}
      };
      int main()
      {
      	std::string str;
      	{
      		std::auto_ptr<Report> ps(new Report("using auto_ptr"));
      		ps->comment();
      	}
      	{
      		std::shared_ptr<Report> ps(new Report("using shared_ptr"));
      		ps->comment();
      	}
      	{
      		std::unique_ptr<Report> ps(new Report("using unique_ptr"));
      		ps->comment();
      	}
      	{
      		//std::shared_ptr ps(&str);
      	}
      	return 0;
      }
      
      • 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
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      Object created!
      using auto_ptr
      Object deleted!
      Object created!
      using shared_ptr
      Object deleted!
      Object created!
      using unique_ptr
      Object deleted!
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    4. 三种智能指针的区别:
      • auto_ptr:如果前面的智能指针的指向和现有的智能指针指向了同一个对象,则针对这个对象的操作所有权传递给了现有的指针,而原有的智能指针无法引用该对象,auto_ptr使用需要使用new分配内存,注,unique_ptr和shared_ptr指针不能转换成auto_ptr,但是auto_ptr指针能转换成unique_ptr和shared_ptr指针。
      • unique_ptr: 如果前面的智能指针和现有的智能指针指向了同一个对象,则编译器会报错,unique_ptr使用需要使用new或者new[]分配内存。
      • shared_ptr如果前面的智能指针和现有的智能指针指向了同一个对象,则二者共享针对这个对象操作的所有权,shared_ptr使用需要new分配内存,注shared_ptr指针不能与unique_ptr共享同一个对象所有权。
      #include
      #include
      #include
      int main()
      {
      	std::unique_ptr<std::string> film1[5] =
      	{
      		std::unique_ptr<std::string>(new std::string("u111")),
      		std::unique_ptr<std::string>(new std::string("u222")),
      		std::unique_ptr<std::string>(new std::string("u333")),
      		std::unique_ptr<std::string>(new std::string("u444")),
      		std::unique_ptr<std::string>(new std::string("u555"))
      		//上面的auto_ptr已经转换为unique_ptr指针
      	};
      	std::auto_ptr<std::string> film2[5] =
      	{
      		std::auto_ptr<std::string>(new std::string("a111")),
      		std::auto_ptr<std::string>(new std::string("a222")),
      		std::auto_ptr<std::string>(new std::string("a333")),
      		std::auto_ptr<std::string>(new std::string("a444")),
      		std::auto_ptr<std::string>(new std::string("a555"))
      	};
      	std::shared_ptr<std::string> film3[5] =
      	{
      		std::shared_ptr<std::string>(new std::string("u111")),
      		std::shared_ptr<std::string>(new std::string("u222")),
      		std::shared_ptr<std::string>(new std::string("u333")),
      		std::shared_ptr<std::string>(new std::string("u444")),
      		std::shared_ptr<std::string>(new std::string("u555"))
      		//上面的shared_ptr已经转换为unique_ptr指针
      	};
      	//std::unique_ptr ptr1 = film2[2]; //编译器报错
      
      	//std::auto_ptr ptr1 = film2[1]; //与下面语句使用运行时会终止程序
      	//std::cout << *film2[1] << std::endl;        
      
      
      	std::shared_ptr<std::string> ptr = film3[2];
      	(*ptr) += "123";
      	std::cout << (*ptr) << " " << (*film3[2]) << std::endl;
      
      
      	std::unique_ptr<double[]> unptr1(new double(5));
      	std::unique_ptr<std::string[]> unprt2(new std::string[4]);
      	return 0;
      } 
      
      • 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
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      u333123 u333123
      
      • 1
  • 相关阅读:
    SpringBoot整合dubbo(一)
    Linux 基础复习
    玩法专利获批,发布4年《Beat Saber》为何持续火爆
    【C++模板】类模板的全部特例化和局部特例化(偏特化-partial specialization)
    《Bayes-Optimal Hierarchical Multi-label Classificaiton》-TKDE
    解决传统难题,WMS系统实现信息数据实时追踪
    【图】按公因数计算最大组件大小 并查集
    Numpy基础入门知识点总结
    【 医学影像| 数据预处理】
    分享66个Python管理系统源代码总有一个是你想要的
  • 原文地址:https://blog.csdn.net/LEVIATHANq/article/details/133649166