首页 > 编程语言 >stringstream 与auto c++

stringstream 与auto c++

时间:2023-06-21 21:34:56浏览次数:46  
标签:11 容器 int auto 数据类型 C++ c++ stringstream

stringstream的用法,动态创建不同文件名

for(int i=0;i<n;i++)
{
string filename;
stringstream ss;

ss << "file" << i << ".txt";
ss >> filename;
ss.clear();
}

auto的用法,通常用于for循环

常规思路,我们想要输出一个数组的全部元素时,往往采用以下的方法:

//随机定义的数组
int array[10] = { 54, 23, 78, 9, 15, 18, 63, 33, 87, 66 };

for (int i = 0; i < 10; i++) {
cout << array[i] << " "; //输出:54 23 78 9 15 18 63 33 87 66
}

在C++11标准中,我们可以在for循环使用冒号 : 来简化这一过程:

//随机定义的数组
int array[10] = { 54, 23, 78, 9, 15, 18, 63, 33, 87, 66 };

for (auto a : array) {
cout << a << " "; //输出:54 23 78 9 15 18 63 33 87 66
}

a在每次循环中,依次等于array[i]。上面两个例程的结果是相同的。

关于上述特殊for循环用法,有以下注意点:
1、需要编译器支持C++11及以上的标准

2、形如 for(auto c:s) 的格式,auto可以是别的数据类型比如char,int,const char*等等各类数据类型,可以是自定义的数据类型。c是一个变量名称,可以按变量名规则任意定义;s是一个容器名称,可以是一个数组,可以是string等等。

3、for(auto &c:s)与for(auto c:s)的区别1:
for(auto c:s)中b为一个容器,效果是利用c遍历并获得s容器中的每一个值,但是c无法影响到s容器中的元素。
for(auto &c:s)中加了引用符号,可以对容器中的内容进行赋值,即可通过对c赋值来做到容器s的内容填充。

如下示例:

#include <iostream>
#include <string>
using namespace std;

int main(void)
{
string s("hello world");

for (auto c : s) {
c = 't';
}

cout << s << endl; //结果为hello world

for (auto& c : s) {
c = 't';
}

cout << s << endl; //结果为ttttttttttt
}

可见不用&引用,不能使s中的字符改变成’t’。

4、for(auto &c:s)与for(auto c:s)的区别2:
使用for(auto &c:s)时,直接引用原字符串进行遍历操作。
使用for(auto c:s)时,逻辑上会复制一个s字符串再进行遍历操作。
由于复制一个字符串花费了大量的时间,所以第一种用法的程序执行速度要快于第二种用法。

5、在for(auto &c:s)或for(auto c:s)中, auto用于for循环的作用:根据s的数据类型由编译器自动确定c的数据类型。

在 C++11 之前的版本(C++98 和 C++ 03)中,定义变量或者声明变量之前都必须指明它的类型,比如 int、char 等;但是在一些比较灵活的语言中,比如 C#、JavaScript、PHP、Python 等,程序员在定义变量时可以不指明具体的类型,而是让编译器(或者解释器)自己去推导,这就让代码的编写更加方便。C++11 为了顺应这种趋势也开始支持自动类型推导了!C++11 使用 auto 关键字来支持自动类型推导。

标签:11,容器,int,auto,数据类型,C++,c++,stringstream
From: https://www.cnblogs.com/hermione1985/p/17497172.html

相关文章

  • 浏览器插件管理工具 auto-extension-manager
    背景最初的需求是,能够根据当前TAB的URL,自动打开或者关闭某些浏览器插件。找到了一个扩展管理工具(本身也是个扩展),有类似的功能,但却失效了,而且作者看起来没有再维护了。所以,就自己写了一个。插件JasonGrass/auto-extension-manager:achromeextensionmanagerwhereyouca......
  • C++中的类简要介绍
    (文章目录)前言本篇文章讲给大家介绍一个C++中重要的概念,了解了这个概念大家就明白了为什么C++会叫做面向对象编程了。一、什么是类什么是对象1.类的概述其实我们生活中有很多类的例子,就像老虎是猫科动物可以看作一个大类,昆虫又是一个大类,机动车和非机动车又是不同的类。通过......
  • 程序删除自身 c++ win32
    include<windows.h>//设置本程序进程基本为实时执行,快速退出。SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);//通知资源管理器,本程序删除SHChangeNotify(SHCNE_DELETE,SHCNF_PA......
  • 认识soui4js(第三篇):使用C/C++开发扩展模块
    首先需要明确:JS代码本身不具备直接调用系统API的能力,JS代码能调用什么功能,都依赖于其它扩展模块提供了什么样的接口。soui4js模块将soui的界面能力作为一个js模块导出到了js中,使得js可以和C++一样操作GUI。但是操作GUI只是一个客户端APP的一个需求。一个产品可能会有各种需求是......
  • 【车载开发】Android Automotive车载操作系统开发解密篇
    提到Android车载,我们应该都不陌生。传统的车载功能单一,无太多娱乐性,而随着智能化时代的发展,车载系统也被赋予了在系统中预装Android应用的能力,基于Android平台的车载信息娱乐系统——AndroidAutomotive应运而生。而今,包括BAT在内许多传统互联网企业纷纷布局手机产业,追逐新能源造......
  • C++ 中的运算符重载
     您可以重定义或重载大部分C++内置的运算符。这样,您就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字operator和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。https://www.lekaowang.com/jszgz/z......
  • C++ 中的函数重载
     在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。https://www.lekaowang.com/jszgz/zxj/lfb/......
  • C++ 多态
     多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。https://www.lekaowang.com/zhxfgcs/kfx/0j0/......
  • C语言与C++不得不说的那点事
    说到C语言,就不得不说它的继承者——C++语言。众所周知,C++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。虽然因为天然的血缘关系,导致两......
  • 2009第二届C++技术大会即将在上海隆重召开
     2009第二届C++  C++对于现代软件的发展功不可没,特别是在系统软件开发领域,C++扮演着关键的角色。中国作为全球软件产业最具潜力的市场,越来越多的企业认识到了C++及相关系统软件技术在软件产业中举足轻重的作用。 为了推动C++及相关系统软件技术在国内的深度应用......