网站建设实训报告命名规范,怎么开发网站平台,ftp如何导入wordpress 主题,重庆网站建设合肥公司博客主页#xff1a;【夜泉_ly】 本文专栏#xff1a;【C】 欢迎点赞#x1f44d;收藏⭐关注❤️ 文章目录 #x1f4a1;前言#x1f4a1;访问及遍历1.速览2.operator[] -重点⭐2.1函数原型2.2用法2.3与at 3.迭代器3.1函数原型3.2用法速览3.3简介 4.范围for4.1用法速览4.2… 博客主页【夜泉_ly】 本文专栏【C】 欢迎点赞收藏⭐关注❤️ 文章目录 前言访问及遍历1.速览2.operator[] -重点⭐2.1函数原型2.2用法2.3与at 3.迭代器3.1函数原型3.2用法速览3.3简介 4.范围for4.1用法速览4.2简介 5.访问首尾元素5.1函数原型5.2用法速览 前言
在这篇文章中我将继续简单探讨 C 中 string 的基本用法。写这篇文章的主要目的是帮助我巩固所学的知识同时也便于未来的复习和参考。
如果你想大致的了解string的基本用法也可以留下来看看。
对于那些希望深入学习更多细节的读者可以去看看这个网站cplusplus.com以获取更全面的参考资料。
访问及遍历
1.速览
int main()
{string str(Hello World);//最简单的遍历方式就是operatorcout str endl;//用下标遍历for(size_t i 0; i str.size(); i){cout str[i];}cout endl;//用迭代器遍历string::iterator i str.begin();while(i ! str.end()){cout *i;}cout endl;//用范围for遍历for(auto e : str){cout e;}cout endl;//访问首尾元素cout str.front() str.back() endl;return 0;
}Output:
Hello World
Hello World
Hello World
Hello World
H d2.operator[] -重点⭐
2.1函数原型
char operator[] (size_t pos);
const char operator[] (size_t pos) const;2.2用法
和数组的用法是一样的。
2.3与at
at也是string类中提供的函数其函数原型
char at (size_t pos);
const char at (size_t pos) const;如果正常使用[]与at是一致的一般不用at用[]。 如果乱传pos[]与at有些许不同 当pos不符合[]和at的规范[]会断言报错at会抛异常 string str(Hello World);
str[666];try
{str.at(666);
}
catch (const std::exception e)
{cout e.what() endl;
}对于[] pos传0 ~ size-1没有问题。如果是常对象pos传size没有问题。其他情况都是未定义行为。 对于at pos只能传0 ~ size-1其他情况会抛出异常。
3.迭代器
3.1函数原型
begin
iterator begin();
const_iterator begin() const;end
iterator end();
const_iterator end() const;rbegin
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;rend
reverse_iterator rend();
const_reverse_iterator rend() const;cbegin、cend、crbegin、crend
const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;3.2用法速览
begin、end、rbegin、rend
int main()
{string str(6, 0);//正向遍历并修改string::iterator it str.begin();for (char i 0; it ! str.end(); i, it){*it i;}cout str: str endl;//反向遍历并打印string::reverse_iterator rit str.rbegin();while (rit ! str.rend()){cout *rit;rit;} cout endl;return 0;
}Output:
str: 012345
543210与begin、end、rbegin、rend不同 cbegin、cend、crbegin、crend只能针对const修饰的string类对象一般不用这几个。
3.3简介
迭代器是像指针一样的类型有可能是指针有可能不是指针。 一般用于对应STL中各种函数的接口其作用也类似于指针。 在string中一般不会手动控制迭代器推荐使用[]。
正向迭代 begin指向首元素end指向末尾元素后一个位置加加迭代器使其正向移动一步。 反向迭代 rbegin指向末尾元素rend指向首元素前一个位置加加迭代器使其反向移动一步。 注意 这里都是开区间[beginend、 [rbeginrend
例如
void Test()
{string str(B 6 6 6 E);string::iterator it_B str.begin();string::iterator it_E str.end();string::reverse_iterator rit_B str.rbegin();string::reverse_iterator rit_E str.rend();cout *(it_B): *it_B *(it_E - 1): *(it_E - 1) endl;cout *(rit_B): *rit_B *(rit_E - 1): *(rit_E - 1) endl;
}Output:
*(it_B):B *(it_E - 1):E
*(rit_B):E *(rit_E - 1):B另外迭代器中加了assert断言因此只要位置不合理都会直接报错比如尝试让上面代码中的it_B--; 或者让it_E:
4.范围for
只要支持迭代器就支持范围for
4.1用法速览
void Test()
{string str(Hello World);for (char c : str)cout c;cout endl;for (char c : str.rbegin())cout c;
}Output:
Hello World4.2简介
范围for是C给出的一颗语法糖使用极其便利。 在上面我标了一句话只要支持迭代器就支持范围for 因为范围for是基于迭代器实现的。
void Test()
{string str(Hello World);for (auto it str.begin(); it ! str.end(); it)cout *it;for (char c : str)cout c;
}5.访问首尾元素
5.1函数原型 char back();
const char back() const;char front();
const char front() const;5.2用法速览
只能提供首尾元素用的不多。
void Test()
{string str(6 6 6 6 6);str.front() F;str.back() B;cout Front: str.front() endl;cout Back: str.back() endl;
}Output:
Front:F
Back:B需注意如果为空串会导致未定义行为。 希望本篇文章对你有所帮助并激发你进一步探索编程的兴趣 本人仅是个C语言初学者如果你有任何疑问或建议欢迎随时留言讨论让我们一起学习共同进步 #mermaid-svg-QXeFyUq7yDyreLRN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QXeFyUq7yDyreLRN .error-icon{fill:#552222;}#mermaid-svg-QXeFyUq7yDyreLRN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QXeFyUq7yDyreLRN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-QXeFyUq7yDyreLRN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QXeFyUq7yDyreLRN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QXeFyUq7yDyreLRN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QXeFyUq7yDyreLRN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QXeFyUq7yDyreLRN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QXeFyUq7yDyreLRN .marker.cross{stroke:#333333;}#mermaid-svg-QXeFyUq7yDyreLRN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QXeFyUq7yDyreLRN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QXeFyUq7yDyreLRN .cluster-label text{fill:#333;}#mermaid-svg-QXeFyUq7yDyreLRN .cluster-label span{color:#333;}#mermaid-svg-QXeFyUq7yDyreLRN .label text,#mermaid-svg-QXeFyUq7yDyreLRN span{fill:#333;color:#333;}#mermaid-svg-QXeFyUq7yDyreLRN .node rect,#mermaid-svg-QXeFyUq7yDyreLRN .node circle,#mermaid-svg-QXeFyUq7yDyreLRN .node ellipse,#mermaid-svg-QXeFyUq7yDyreLRN .node polygon,#mermaid-svg-QXeFyUq7yDyreLRN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QXeFyUq7yDyreLRN .node .label{text-align:center;}#mermaid-svg-QXeFyUq7yDyreLRN .node.clickable{cursor:pointer;}#mermaid-svg-QXeFyUq7yDyreLRN .arrowheadPath{fill:#333333;}#mermaid-svg-QXeFyUq7yDyreLRN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QXeFyUq7yDyreLRN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QXeFyUq7yDyreLRN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-QXeFyUq7yDyreLRN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-QXeFyUq7yDyreLRN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QXeFyUq7yDyreLRN .cluster text{fill:#333;}#mermaid-svg-QXeFyUq7yDyreLRN .cluster span{color:#333;}#mermaid-svg-QXeFyUq7yDyreLRN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QXeFyUq7yDyreLRN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}