目录
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博客