string容器以及vector容器的一些操作(常用的,不全)

 

目录

string 

1.string的一些创建

 2.string 的读入和输出:

 3.string的一些操作

 4.彻底清空string 容器的函数

vector 

1.vector的一些创建:

2.vector的一些操作:

3.vector的彻底清空并释放内存:

参考:【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介_vector shrink_to_fit-CSDN博客


string 

头文件为<string>

如果有窗口中的代码省略了一些东西是因为下面这些string有关的代码都在同一文件中,vector哪里是独立的

1.string的一些创建

//string的一些创建
string s1;	//默认初始化,s1是个空字符串
string s2 = s1;		//s2是s1的副本,s2只是与s1的值相同,不是指向同一段地址
string s3 = "hiyaaaa";		//s3是该字符串字面值的副本

string s4(10, 'c');			//s4的内容是"cccccccccc";

string str2(s3, 3, 5);		//将str2初始化为s3中从第3位置到第5为止的字符
string str3(s3, 3);		//将str3初始化为s3中从第3位置到末尾的字符

string str4("hellonihao", 5);	//将str4初始化为从字符串常量开头往后5字节的内容(会输出hello)

 2.string 的读入和输出:

//string 的读入和输出:
cin >> s1;
cout << s1 << endl;;
printf("%s", s1.c_str());	//printf不能直接输出string,要写成这样,用.c_str()函数
//用getline读入一整行
string s;
getline(cin, s);
cout << s << endl;
//关于c风格字符串的其他事情:
char ss[20];
fgets(ss, 20, stdin);		//用法类似于被弃用的gets,只不过第二参数要包括结尾的'\0'
cin.getline(ss, 20);		//往ss中读入一行

 3.string的一些操作


	//string支持>,<,>=,<=,==,!=等所有比较操作,按字典顺序进行比较
	bool flag = s1 == s3;
	//字面值和string对象相加:
	string ss1 = "hello", ss2 = "world";
	string ss3 = s1 + "," + s2 + '\n';	
	//当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string:
	
	//string的.empty()函数,来判断当前容器是否为空
	string arr1, arr2 = "1231";
	cout << arr1.empty() << endl;
	cout << arr2.empty() << endl;
	//string 的.size()函数,输出字符串里面字符的大小
	cout << arr1.size() << endl;
	cout << arr2.size() << endl;

 4.彻底清空string 容器的函数

//彻底清空string 容器的函数(.clear()并不会释放内存空间,只会把size()清零
s1.clear();		//使用shrink_to_fit()函数前,先用clear()清空
s1.shrink_to_fit();		//将s1多余的空间(未使用)释放
cout << "Capacity after shrink_to_fit() is " << s1.capacity()<< " and size is " << s1.size() << '\n';


string().swap(s3);		//将s3清零并释放
cout << "Capacity after swap() is " << s3.capacity() << " and size is " << s3.size() << '\n';


vector 

头文件为 <vector>

1.vector的一些创建:

vector<int>a;		//相当于一个长度动态变化的int数组
vector<int>b[233];		//相当于第一维长233(不可改变),第二位长度动态变化的int数组
vector<double>c(20, 2.2);	//创建了一个大小为20的,且内容全为2.2的double数组
int n = 4, m = 5;
vector<vector<int>>aa(n, vector<int>(m));		//相当于创建了4*5的二维数组
//其他方法创建二维数组
vector<vector<int>>aa2(n);
for (int i = 0; i < n; i++)
	aa2[i].resize(m, 1);	
vector<int>arr1(5,1);
vector<int>arr2(arr1);	//将arr1中的元素复制到arr2中
vector<string>str1(5, "nihao");
vector<string>str2(str1.begin(),str1.end());		//将str1的元素复制到str2中
vector<int>shuzu1={ 1,23,4,5 };			//shuzu1初始化为1,23,4,5
vector<int>shuzu2({ 1,23,4,5 });		//shuzu2初始化为1,23,4,5
	

2.vector的一些操作:


	//.size()输出大小,.empty()判断是否为空,.clear()清空,但无法释放内存
	vector<int>a(5, 2);
	cout << a.size() << endl;
	cout << a.empty() << endl;
	a.clear();
	cout << a.size() << endl;
	cout << a.empty() << endl;
	vector<int>b({ 11,2,3,4,5 });
	cout << b.front() << endl;		//.front()返回第一个元素
	cout << b.back() << endl;		//.back()返回最后一个元素
	int x = 555;
	b.push_back(x);		//.push_back(x)把元素x插入到尾部
	b.pop_back();		//.pop_back()删除最后一个元素

	//迭代器,类似于指针,可以用来解引用
	for (vector<int>::iterator it = b.begin(); it != b.end(); it++)
		cout << *it << endl;
	cout << endl;
	for (auto it = b.begin(); it != b.end(); it++)		//方便起,可以用auto关键字
		cout << *it << endl;
	//.begin()返回vector中第一个元素的迭代器,.end()返回vector的尾部,即其中最后元素的下一个位置
	//利用迭代器运用binary_search()函数(头文件为<algorithm>)去寻找值,
	vector<int>::iterator ie = b.begin();
	bool cc = binary_search(b.begin(), ie+3,3 );
	cout << endl<< cc << endl;


3.vector的彻底清空并释放内存:

	vector<int>a(50, 2);
	cout << a.capacity() << "\t" << a.size() << endl;
	a.clear();		//用.shrink_to_fit()函数前,先用clear()清空
	a.shrink_to_fit();
	cout << a.capacity() << "\t" << a.size() << endl;

	vector<int>b(50, 2);
	cout << b.capacity() << "\t" << b.size() << endl;
	vector<int>().swap(b);			//利用交换来清空
	cout << b.capacity() << "\t" << b.size() << endl;

ps:

在参考链接那里,有个文章的vector的swap清空写错了,应该改为:vector<int>().swap(nums)

参考:【C++】如何释放vector的内存空间及std::vector::shrink_to_fit用法简介_vector shrink_to_fit-CSDN博客

 string对象的内存释放_如何将string内存清空-CSDN博客

C++ string清空并释放内存空间的两种方法(shrink_to_fit()、swap())_c++ string 释放-CSDN博客

顺序容器: 内存管理(shrink_to_fit、capacity、reserve)-CSDN博客

C++中的 c_str() 函数-CSDN博客

c++使用vector创建二维数组的方法_利用vector定义二维数组-CSDN博客

C++ vector用法详解_vector c++ 用法-CSDN博客

【C++】auto关键字_c++ auto-CSDN博客

C++11新特性:基于范围的循环(foreach)_c++11 foreach-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/507574.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaWeb】Day31.SpringBootWeb请求响应——分层解耦(一)

分层解耦 1.三层架构 1.1 介绍 在我们进行程序设计以及程序开发时&#xff0c;尽可能让每一个接口、类、方法的职责更单一些&#xff08;单一职责原则&#xff09;。 单一职责原则&#xff1a;一个类或一个方法&#xff0c;就只做一件事情&#xff0c;只管一块功能。 这样就…

全网最全解析!Spring与非Spring环境下获取动态代理对象的原始目标对象

文章目录 前言在Spring AOP中获取动态代理对象的目标对象前置知识---SpringBoot默认是JDK动态代理还是Cglib动态代理&#xff1f;SpringBoot 2.x 版本分析Spring5 版本分析SpringBoot 1.x 版本分析SpringBoot 2.x 为何默认使用 Cglib 前置准备--工程准备1、自己写工具类获取--利…

中国力量:NeurIPS报告折射中国人工智能研究的惊人崛起

会议之眼 快讯 近年来&#xff0c;人工智能技术的发展和应用在全球范围内引起了广泛关注。2024年3月27日&#xff0c;美国保尔森基金会旗下的麦克罗波洛智库&#xff08;MacroPolo&#xff09;发布的《全球人工智能人才追踪调查报告 2.0》为我们揭示了这一领域的一个重要趋势&…

大模型 智能体 智能玩具 智能音箱 构建教程 wukong-robot

视频演示 10:27 一、背景 继上文《ChatGPT+小爱音响能擦出什么火花?》可以看出大伙对AI+硬件的结合十分感兴趣,但上文是针对市场智能音响的AI植入,底层是通过轮询拦截,算是hack兼容,虽然官方有提供开发者接口,也免不了有许多局限性(比如得通过特定指令唤醒),不利于我…

vite vue3 import.meta.glob动态路由

在Vite中使用Vue 3&#xff0c;你可以使用import.meta.glob来导入目录下的多个Vue组件&#xff0c;并自动生成路由。以下是一个简单的例子&#xff1a; router/index.js // router/index.js import { createRouter, createWebHistory } from vue-router;// 自动导入views目录下…

【算法】01背包问题(代码+详解+练习题)

题目&#xff1a; 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整…

举个栗子!Tableau 技巧(268):折叠文本表的数据列

之前&#xff0c;我们分享过 &#x1f330; &#xff1a;灵活折叠文本表的多级数据行。陆续收到很多数据粉的反馈&#xff0c;想学习如何折叠文本表的数据列。 如下示例&#xff0c;假如将所有月份字段全部呈现出来&#xff0c;表格过长不利于查看数据。那么&#xff0c;我们就…

物联网网关和飞鸟物联平台如何助力其实现智能化升级,提升生产效率

随着工业4.0时代的到来&#xff0c;物联网技术逐渐成为推动工业转型升级的关键力量。物联网网关作为连接工业设备与网络的核心枢纽&#xff0c;在工业自动化、数据收集与分析等方面发挥着越来越重要的作用。本案例将围绕一家知名制造企业&#xff0c;展示物联网网关和飞鸟物联平…

职场人该如何学习使用AI大模型

【写在开篇&#xff1a;这是一篇针对非技术背景的职场人&#xff0c;学习和使用AI大模型的完全攻略。】 【今日份AI绘画&#xff1a;终身学习的职人】 非技术背景的职场人想要学习和使用AI大模型&#xff0c;可以遵循以下步骤&#xff1a; 1. 基础学习&#xff1a;首先&#…

Clickhouse-表引擎探索之MergeTree

引言 前文曾说过&#xff0c;Clickhouse是一个强大的数据库Clickhouse-一个潜力无限的大数据分析数据库系统 其中一个强大的点就在于支持各类表引擎以用于不同的业务场景。 MergeTree MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一…

如何在Ubuntu系统部署Z-blog博客结合cpolar实现无公网IP访问本地网站

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…

Huber Robust loss

Huber Loss&#xff08;Huber损失&#xff09;是一种用于回归任务的损失函数&#xff0c;它结合了均方误差&#xff08;MSE&#xff09;和绝对误差&#xff08;MAE&#xff09;的优点&#xff0c;在一定程度上抵抗了异常值的影响。Huber Loss 的数学表达式如下所示&#xff1a;…

【上海大学计算机组成原理实验报告】二、数据传送实验

一、实验目的 了解在模型机中算术、逻辑运算单元的控制方法。学习机器语言程序的运行过程。通过人工译码&#xff0c;加深对译码器基本工作原理的理解。 二、实验原理 根据实验指导书的相关内容&#xff0c;本次实验所要用的CP226实验仪在手动方式下&#xff0c;运算功能通过…

Matlab|配电网三相不平衡潮流计算【隐式Zbus高斯法】【可设定变压器数量、位置、绕组方式】

目录 主要内容 部分代码 结果一览 1.以33节点为例 2.以12节点系统为例 下载链接 主要内容 该模型基于隐式Zbus高斯法实现对配电网的三相不平衡潮流计算&#xff0c;通过选项可实现【不含变压器】和【含变压器】两种方式下的潮流计算&#xff0c;并且通过参数设置…

NLP技术大解析:人工智能应用从分词到情感分析的全面指南

自然语言处理&#xff0c;简称NLP&#xff0c;是人工智能领域中的一个重要分支&#xff0c;致力于让计算机理解和生成人类使用的自然语言。随着科技的飞速发展&#xff0c;NLP已经渗透到我们生活的方方面面&#xff0c;从智能语音助手到在线翻译工具&#xff0c;再到社交媒体的…

TikTok零播放?可能是海外代理IP的问题

在当今社交媒体的蓬勃发展中&#xff0c;TIKTOK作为一款备受欢迎的短视频平台&#xff0c;其直播功能也逐渐受到用户的青睐。然而&#xff0c;有时候跨境电商商家在进行直播时却面临着一个令人头疼的问题&#xff1a;没有观众。这时候&#xff0c;海外代理IP可能是一个潜在的原…

前端-深入探讨网络面试题

第一关 请求-文件、数据、连接 文件类的请求&#xff1a;加载HTMl、CSS 数据&#xff1a; ajax请求&#xff08;基于HTTP&#xff0c;HTTP基于TCP&#xff09;&#xff0c;如何建立连接的&#xff08;三次握手&#xff0c;为什么不是两次或者四次&#xff09;&#xff0c;sock…

C++ | Leetcode C++题解之第2题两数相加

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一对一的hashvector<int> b(2,-1);//用来承载结果&#xff0c;初始化一个大小为2&#xff0c;值为-1的容…

Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)

【写在前面】 之前应公司需要&#xff0c;给公司写过一整套直播的库( 推拉流&#xff0c;编解码)&#xff0c;类似于 libobs。 结果后来因为没有相关项目&#xff0c;便停止开发&维护了。 不过里面很多有用的组件&#xff0c;然后也挺好用的&#xff0c;遂开源出来一部分。…

总结HTTPS加密流程

前言 本篇博客将介绍HTTPS加密的具体流程&#xff0c;坐好板凳发车啦~~ 一.HTTPS是什么 HTTPS也是一个应用层协议&#xff0c;是在HTTP协议的基础上引入了一个加密层 HTTP协议内容都是按照文本的方式明文传输的&#xff0c;这就导致在传输的过程中可能有一些内容被篡改。 …