1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C++学习笔记(STL篇)string vector迭代器 stack queue

C++学习笔记(STL篇)string vector迭代器 stack queue

时间:2022-01-27 21:53:51

相关推荐

C++学习笔记(STL篇)string vector迭代器 stack queue

字符串基本操作

初始化string对象的方式:

string s1默认初始化,s1是一个空串string s2(s1)s2是s1的副本string s2 = s1等价于s2(s1),s2是s1的副本string s3("value")s3是字面值"value"的副本,除了字面值最后的那个空字符外string s3 = "value"等价于s3("value"),s3是字面值"value"的副本sting s4(n,'c')把s4初始化为由连续n个字符组成的串

读写string对象

int main(){string s;cin >> s;cout << s << endl;return 0;}

注:string对象会自动忽略开头的空白(空格、换行、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止。

如输出“ hello world”,输出为“hello”

读取未知数量的string对象

string word;while(cin >> word)cout << word << endl;

使用getline读取一整行

string line;while(getline(cin,line))cout << line << endl;

注:getline(cin,s)读取一整行,直到读取到换行,若只有换行,则为空串

string的empty和size操作

while(getline(cin,line))//判断字符串是否非空,若非空则为真if(!line.empty())cout << line << endl;while(getline(cin,line))//判断字符串大小是否大于80,大于则输出if(line.size() > 80)cout << line << endl;

比较string对象

根据运算符字典顺序进行比较`

例:string str = "Hello";string phrase = "Hello World";string slang = "Hiya";slang > phrase > str

为string赋值

string st1(10,'c') , st2;//st1内容是cccccccccc,str2是一个空字符串st1 = st2;//此时st1和st2都是空字符串

两个string对象相加

string s1 = "hello," , s2 = "world\n";string s3 = s1 + s2;s1 += s2;

字面值和string对象相加

string s1 = "hello," , s2 = "world";string s3 = s1 + ',' + s2 + '\n';此时s3的值为hello,,world\n

注:当把string对象与字符字面值及字符串字面值混在一条语句使用时,必须保证每个加法运算符的两侧的运算符至少一个是string。

使用for语句处理(遍历)每个字符

输出字符串的每一个字符 int main(){string str("some string");for(auto c: str)cout << c << endl;}统计string中标点符号的个数int main(){int count = 0;string str("Hello World!!!");for(auto c: str)if(ispunct(c))count++;cout << count << " punctuation characters in " << str << endl;} 将整个string对象转换成大写 int main(){string str("hello, world!!!");for(auto &c: str)c = toupper(c);//转换成大写cout << str << endl;return 0; }使用下标将字符串的第一个词转为大写形式 int main(){string str("some thing");for(decltype(str.size()) index = 0; index != str.size() && !isspace(str[index]); index++)str[index] = toupper(str[index]);cout << str << endl;return 0; }十进制数字转十六进制数字int main(){const string hexdigits("0123456789ABCDEF");//可能的十六进制数字 cout << "Enter a series of numbers between 0 abd 15" << " separated by spaces. Hit ENTER when finished:"<< endl;string result;//用于保存十六进制的字符串 string::size_type n;//用于保存从输入流读取的数 while(cin >> n){if(n < hexdigits.size())//忽略无效输入 result += hexdigits[n];//得到对应的十六进制数字 }cout << "Your hex number is : " << result << endl;}

注:decltype:希望从表达式的类型推断出想要定义的变量的类型,该操作返回操作数的类型。

decltype(f) sum = s; //sum的类型就是f的返回类型

vector基本操作

vector初始化

vector<T> v1v1是一个空vector,它潜在的元素是T类型的,执行默认初始化vector<T> v2(v1)v2中包含有v1所有元素的副本vector<T> v2 = v1等价于v2(v1),v2中包含有v1所有元素的副本vector<T> v3(n,val)v3包含了n个重复的元素,每个元素的值都是valvector<T> v4(n)v4包含了n个重复执行了值初始化的对象vector<T> v5{a,b,c...}v5包含了初始值个数的元素,每个元素被赋予相应的初始值vector<T> v5 = v5{a,b,c...}等价于v5{a,b,c...}注:需要区分花括号和圆括号vector<int> v1(10);//v1有10个元素,每个的值都是0vector<int> v2{10};//v2有1个元素,该元素的值是10vector<int> v3(10,1);//v3有10个元素,每个的值都是1vector<int> v4{10,1};//v4有2个元素,值分别是10和1vector<string> v5{"hi"};//v5有一个元素vector<string> v6("hi");//错误:不能使用字符串字面值构建vector对象vector<string> v7{10};//v7有10个默认初始化的元素vector<string> v8{10,"hi"};//v8有10个值为"hi"的元素

向vector中添加新元素及遍历

vector<int> v1;//空vector对象int i; while(cin >> i)//读入数字 v1.push_back(i);//push_back(t)向v1的尾端添加一个值为t的元素for(auto &i: v1)//与string一样,带引用时可以修改,不带不能修改,只能遍历 i *= -1;for(auto i: v1)cout << i << " ";

从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改写成大写形式。输出改变后的结果,每个词占一行。

#include <iostream>#include <vector>#include <string>using std::string;using std::vector;using namespace std;int main(){vector<string> v;string word;while(cin >> word){v.push_back(word);}for(int i = 0; i < v.size(); i++)for(int j = 0; j < v[i].size(); j++)v[i][j] = toupper(v[i][j]);for(auto c: v)cout << c << " " << endl;}

迭代器

标准容器迭代器的运算符

*iter返回迭代器iter所指元素的引用iter->mem解引用iter并获取该元素的名为mem的成员,等价于(*iter).mem++iter令iter指示容器中的下一个元素--iter令iter指示容器中的上一个元素iter1 == iter2判断两个迭代器是否相等(不相等),如果两个迭代器指示的是同一个元素或者它们是同一个容器的iter1 != iter2尾后迭代器,则相等;反之,不相等

begin与end运算符

只需读操作可使用cbegin和cend,否则使用begin和end

利用迭代器将string对象的第一个字母改为大写形式string s("some string");if(s.begin() != s.end()) {auto it = s.begin();*it = toupper(*it);}cout << s;利用迭代器将text第一个单词全部转换为大写并输出string text("hello world!");for(auto it = text.begin(); it != text.end() && !isspace(*it) ; it++)*it = toupper(*it);for(auto it = text.begin(); it != text.end(); it++)cout << *it;利用迭代器进行二分搜索vector<int> num{0,1,2,3,4,5,6,7,8,9,10};auto beg = num.begin(), end = num.end();int target;cin >> target;auto mid = num.begin() + (end - beg) / 2;//注:不能用(begin + end) / 2,因为end是最后一个元素的后一个位置while(beg < end && *mid != target){if(*mid > target)end = mid - 1;elsebeg = mid + 1;mid = beg + (end - beg) / 2;}if(*mid == target)cout << "找到了";利用迭代器统计分数vector<int> num(11,0);int score;while(cin >> score){if(score <= 100){auto it = num.begin();it += score / 10;(*it)++;}}for(auto it = num.begin(); it != num.end(); it++)cout << *it << " ";

stack容器

#include <stack>stack<int> s;//初始化s.push(x);//将x入栈while(!s.empty()){cout << "栈顶元素为: " <<s.top() << endl; s.pop();//出栈} s.size();//栈的大小

queue容器

#include <queue>queue<int> q;//初始化q.push(x);//将x入队while(!q.empty()){cout << "队头元素为" << q.front() << endl;cout << "队尾元素为" << q.back() << endl;q.pop();//出队}s.size();//栈的大小

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。