当前位置: 首页 > news >正文

足球外围网站自己做的链接式友谊

足球外围网站自己做的,链接式友谊,新世纪建设集团有限公司网站,web前端开发需要掌握什么一、string类对象的常见构造 我们可采取以下的方式进行构造,以下是常用的接口: //生成空字符串 string; //拷贝构造函数 string(const string& str); //用C-string来构造string类对象 string(const char* s); //string类对象中包含n个字符c strin…

一、string类对象的常见构造

        我们可采取以下的方式进行构造,以下是常用的接口:

//生成空字符串
string;		
//拷贝构造函数
string(const string& str);
//用C-string来构造string类对象
string(const char* s);
//string类对象中包含n个字符c
string(size_t n, char c);
#include<string.h>
#include<iostream>
using namespace std;void test1()
{string s1;		string s2("123456");string s3(s2);string s4(5, 'c');cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;cout << s4 << endl;
}int main()
{test1();return 0;
}

二、string类对象的容量操作 

        这里主要对:size、length、capacity、resize、reserve来进行讲解。

        size与length大家都可顾名思义猜出其用途,即:返回String的大小。

        capacity:大家都有学习过顺序表的经验,也可得出其为该容器的容量。

        resize:将字符串的大小调整为长度为 n 个字符。

        clear:清除字符串的内容,使其变为一个空字符串(长度为 0 个字符)。这意味着将字符串中的所有字符都删除,使其不包含任何字符,长度为零。

// 测试string容量相关的接口
// size/clear/resize
void Teststring1()
{// 注意:string类对象支持直接用cin和cout进行输入和输出string s("hello, C++!!!");cout << s.size() << endl;cout << s.length() << endl;cout << s.capacity() << endl;cout << s << endl;// 将s中的字符串清空,注意清空时只是将size清0,不改变底层空间的大小s.clear();cout << s.size() << endl;cout << s.capacity() << endl;// 将s中有效字符个数增加到10个,多出位置用'a'进行填充// “aaaaaaaaaa”s.resize(10, 'a');cout << s.size() << endl;cout << s.capacity() << endl;// 将s中有效字符个数增加到15个,多出位置用缺省值'\0'进行填充// "aaaaaaaaaa\0\0\0\0\0"// 注意此时s中有效字符个数已经增加到15个s.resize(15);cout << s.size() << endl;cout << s.capacity() << endl;cout << s << endl;// 将s中有效字符个数缩小到5个s.resize(5);cout << s.size() << endl;cout << s.capacity() << endl;cout << s << endl;
}

        从该运行结果我们可以得出这个结论:在VS编译器下resize在任何情况下都不会进行缩容! 

        reserve:请求更改容量。它指的是让字符串的容量适应计划中的大小更改,使其长度最多达到 n 个字符。如果 n 大于当前字符串的容量,该函数会导致容器将其容量增加到 n 个字符(或更多)。在其他所有情况下,这被视为一个非约束性的收缩字符串容量的请求:容器的实现可以自由进行其他优化,并使字符串的容量大于 n。

        接下来,我们对其进行测试:

void Teststring2()
{string s;// 测试reserve是否会改变string中有效元素个数s.reserve(100);cout << s.size() << endl;cout << s.capacity() << endl;// 测试reserve参数小于string的底层空间大小时,是否会将空间缩小s.reserve(50);cout << s.size() << endl;cout << s.capacity() << endl;
}

 

        我们可以看到:reserve与resize一样,在任何情况下都不会缩容!

 三、string类对象的遍历操作

        对于string的访问,这里提供三种方式:

        1. 利用库里的重载[]直接进行访问。

        2.利用迭代器进行访问。

        3.利用范围for(其本质还是迭代器)

void Teststring3()
{string s1("hello C++");const string s2("Hello C++");cout << s1 << " " << s2 << endl;cout << s1[0] << " " << s2[0] << endl;s1[0] = 'H';cout << s1 << endl;// s2[0] = 'h';   代码编译失败,因为const类型对象不能修改string s("hello Bit");// 3种遍历方式:// 需要注意的以下三种方式除了遍历string对象,还可以遍历是修改string中的字符,// 另外以下三种方式对于string而言,第一种使用最多// 1. for+operator[]for (size_t i = 0; i < s.size(); ++i)cout << s[i] << endl;// 2.迭代器string::iterator it = s.begin();while (it != s.end()){cout << *it << endl;++it;}// string::reverse_iterator rit = s.rbegin();// C++11之后,直接使用auto定义迭代器,让编译器推到迭代器的类型auto rit = s.rbegin();while (rit != s.rend())cout << *rit << endl;// 3.范围forfor (auto ch : s)cout << ch << endl;
}

四、string类对象的修改操作 

        push_back:在字符串后尾插字符c append在字符串后追加一个字符串

        operator+= :在字符串后追加字符串str c_str(重点)返回C格式字符串

        find + npos:从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置 rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置

        substr:在str中从pos位置开始,截取n个字符,然后将其返回

void Teststring4()
{string str;str.push_back(' ');   // 在str后插入空格str.append("hello");  // 在str后追加一个字符"hello"str += 'C';           // 在str后追加一个字符'C'   str += "++";          // 在str后追加一个字符串"++"cout << str << endl;cout << str.c_str() << endl;   // 以C语言的方式打印字符串// 获取file的后缀string file("string.cpp");size_t pos = file.rfind('.');string suffix(file.substr(pos, file.size() - pos));cout << suffix << endl;// npos是string里面的一个静态成员变量// static const size_t npos = -1;// 取出url中的域名string url("http://www.cplusplus.com/reference/string/string/find/");cout << url << endl;size_t start = url.find("://");if (start == string::npos){cout << "invalid url" << endl;return;}start += 3;size_t finish = url.find('/', start);string address = url.substr(start, finish - start);cout << address << endl;// 删除url的协议前缀pos = url.find("://");url.erase(0, pos + 3);cout << url << endl;
}

五、vs下string的结构

         string总共占28个字节,内部结构稍微复杂一点,先是有一个联合体,联合体用来定义string中字符串的存储空间: 当字符串长度小于16时,使用内部固定的字符数组来存放 当字符串长度大于等于16时,从堆上开辟空间

 union _Bxty { // storage for small buffer or pointer to larger one// This constructor previously initialized _Ptr. Don't rely on the new behavior without// renaming `_String_val` (and fixing the visualizer)._CONSTEXPR20 _Bxty() noexcept : _Buf() {} // user-provided, for fancy pointers_CONSTEXPR20 ~_Bxty() noexcept {} // user-provided, for fancy pointersvalue_type _Buf[_BUF_SIZE];pointer _Ptr;char _Alias[_BUF_SIZE]; // TRANSITION, ABI: _Alias is preserved for binary compatibility (especially /clr)};_Bxty _Bx;

         这种设计也是有一定道理的,大多数情况下字符串的长度都小于16,那string对象创建好之后,内部已经有了16个字符数组的固定空间,不需要通过堆创建,效率高。

        其次:还有一个size_t字段保存字符串长度,一个size_t字段保存从堆上开辟空间总的容量 最后:还有一个指针做一些其他事情。 故总共占16+4+4+4=28个字节。

 

完! 

http://www.hkea.cn/news/658782/

相关文章:

  • 中国做的比较好的电商网站有哪些哈市今日头条最新
  • 微信怎么做网站推广百度网站优化培训
  • 网站开发支持多个币种电子技术培训机构
  • 移动网站设计与制作怎么找关键词
  • 国内移动端网站做的最好的厦门人才网597人才网
  • 建网站收费吗aso关键词覆盖优化
  • 西安的网站设计与制作首页微信视频号怎么推广引流
  • 顺义公司建站多少钱pc端百度
  • wordpress收费资源下载关键词优化的策略
  • 广州做网站建设的公司网站公司
  • 做网络平台的网站有哪些广州网站维护
  • 网页 代码怎么做网站东莞市民最新疫情
  • 电子商务网站设计中影响客户体验的元素有搜索引擎有哪些种类
  • 网站建设难点优化关键词技巧
  • 免费行情网站链接百度知道合伙人官网
  • 餐饮公司网站建设的特点大数据智能营销
  • 济南快速排名刷关键词排名seo软件
  • 系统做网站的地方百度推广登录后台登录入口
  • 集约化网站建设情况广告公司网站制作
  • 网站制作发票字节跳动广告代理商加盟
  • 义乌做网站武汉seo推广优化公司
  • 济宁哪家网站建设公司正规谷歌浏览器 免费下载
  • 有没有女的做任务的网站广东省新闻
  • seo长尾关键词优化如何做网站推广优化
  • 网站搭建服务合同seo排名赚
  • 东莞有什么比较好的网站公司苏州关键词排名系统
  • 做中国供应商免费网站有作用吗浙江网站推广运营
  • mysql8 wordpress百度推广优化是什么意思
  • 做装修广告网站好seo推广公司招商
  • 城市模拟建设游戏网站今天最新的新闻头条新闻