STL笔记 | 总字数: 8.2k | 阅读时长: 32分钟 | 浏览量: |
STL笔记2025-4-17-by青浩洋 下标访问 vector,deque,map可以用下标访问
vector
1 2 std::vector<int > v = {1 , 2 , 3 , 4 , 5 }; int element = v[2 ];
deque
1 2 std::deque<int > dq = {21 , 22 , 23 , 24 , 25 }; int item = dq[1 ];
map特殊:1:如果下标对应的键已经存在于map中,那么可以直接使用下标访问来获取对应的值,并可以修改这个值。
1 2 3 4 5 std::map<std::string, int > myMap; myMap["apple" ] = 5 ; int value = myMap["apple" ]; myMap["apple" ] = 10 ;
2:如果下标对应的键不存在于map中,那么使用下标访问会自动插入一个新的键值对,其中值会进行默认初始化。
1 2 std::map<std::string, int > myMap; int value = myMap["banana" ];
需要注意的是,这种方式可能会导致意外的键值对插入,如果只是想安全地查询是否存在某个键并获取对应的值,更好的做法是使用find成员函数,这样可以避免不必要的插入操作。例如:
1 2 3 4 5 6 7 std::map<std::string, int > myMap; myMap["cherry" ] = 8 ; auto it = myMap.find ("cherry" );if (it!= myMap.end ()) { int value = it->second; }
一维vector
二维vector 1 vector<typename > Arrayname[size];
迭代器遍历vector 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; v.push_back (1 ); v.push_back (2 ); v.push_back (3 ); for (vector<int >::iterator it = v.begin (); it != v.end (); it++){ cout << *it << " " ; } return 0 ; }
vector常用函数 1、push_back(x) 就是在vector容器v后面 添加一个元素x,时间复杂度为O(1)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; for (int i = 1 ; i <= 3 ; i++){ v.push_back (i); } for (vector<int >::iterator it = v.begin (); it != v.end (); it++){ cout << *it << " " ; } return 0 ; }
2、pop_back ():)可以删除vector的 尾 元素,时间复杂度为O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; for (int i = 1 ; i <= 3 ; i++){ v.push_back (i); } v.pop_back (); for (vector<int >::iterator it = v.begin (); it != v.end (); it++){ cout << *it << " " ; } return 0 ; }
3、size():size()用来获得vector中元素的 个数 ,时间复杂度为O(1)。size()返回的是unsigned 类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; for (int i = 1 ; i <= 3 ; i++){ v.push_back (i); } v.pop_back (); cout << v.size (); return 0 ; }
4、clear():用来清空vector中的所有元素,时间复杂度为O(N),N为vector中的元素个数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; for (int i = 1 ; i <= 3 ; i++){ v.push_back (i); } v.pop_back (); v.clear (); cout << v.size (); return 0 ; }
5、insert(it,x):用来向vector的任意迭代器it 处插入一个元素x,时间复杂度O(N) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; for (int i = 1 ; i <= 5 ; i++){ v.push_back (i); } v.insert (v.begin () + 2 , -1 ); for (vector<int >::iterator it = v.begin (); it != v.end (); it++){ cout << *it << " " ; } return 0 ; }
insert(pos,first,last) 在 pos 位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素(简单说就是把两个容器拼接在一起)。
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <bits/stdc++.h> using namespace std; int main () { vector<int > v, v1, v2; for (int i = 1 ; i <= 3 ; i++) v.push_back (i); for (int i = 11 ; i <= 13 ; i++) v1. push_back (i); for (int i = 101 ; i <= 103 ; i++) v2. push_back (i); v.insert (v.end (), v1. begin (), v1. end ()); v.insert (v.end (), v2. begin (), v2. end ()); return 0 ; }
6、erase():有两种用法:删除单个元素、删除一个区间内所有元素。时间复杂度为O(N)。 1:erase(it)即删除迭代器为 it 处的元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; for (int i = 1 ; i <= 5 ; i++){ v.push_back (i); } v.erase (v.begin () + 2 ); for (vector<int >::iterator it = v.begin (); it != v.end (); it++){ cout << *it << " " ; } return 0 ; }
2:**erase(first, last)即删除 [first, last)**内的所有元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <bits/stdc++.h> using namespace std;int main () { vector<int > v; for (int i = 1 ; i <= 5 ; i++){ v.push_back (i); } v.erase (v.begin () + 1 , v.begin () + 3 ); for (vector<int >::iterator it = v.begin (); it != v.end (); it++){ cout << *it << " " ; } return 0 ; }
作用:
函数作用:“去除”容器或数组中相邻元素 之间重复出现的元素(所以一般使用前需要排序)。
函数参数:第一个参数是集合的起始地址,第二个参数是集合的最后一个元素的下一个元素的地址(其实还有第三个参数,比较函数,但是几乎不用,就不说了,其实和sort函数很像)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <iostream> #include <algorithm> int main (void ) { int a[8 ] = {2 , 2 , 2 , 4 , 4 , 6 , 7 , 8 }; int c; std::sort (a, a + 8 ); c = (std::unique (a, a + 8 ) - a ); std::cout<< "c = " << c << std::endl; for (int i = 0 ; i < c; i++) std::cout<< "a = [" << i << "] = " << a[i] << std::endl; return 0 ; }
vector容器去重
1 2 3 4 5 6 std::vector<int > ModuleArr; std::sort (ModuleArr.begin (), ModuleArr.end ()); ModuleArr.erase (unique (ModuleArr.begin (), ModuleArr.end ()), ModuleArr.end ());
stack的中文译为堆栈,堆栈一种数据结构。C语言中堆栈的定义及初始化以及一些相关操作实现起来较为繁琐,而C++的stack让这些都变得简便易实现。因为C++中有许多关于stack的方法函数。 堆栈(stack)最大的特点就是先进后出(后进先出)。就是说先放入stack容器的元素一定要先等比它后进入的元素出去后它才能出去。
stack 初始化 1 2 3 4 5 6 7 stack<int >s1; stack<double >s2; stack<string>s3; stack<结构体类型>s4; stack<int > s5[N]; stack<int > s6[N];
stack 常用函数 1 2 3 4 5 empty () pop () push () size () top ()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <iostream> #include <stack> using namespace std;int main () { stack<int > s; s.push (1 ); s.push (2 ); s.push (3 ); s.push (4 ); cout<<"将元素1、2、3、4一一压入堆栈中后,堆栈中现在的元素为:1、2、3、4" <<endl; cout<<"堆栈中的元素个数为:" <<s.size ()<<endl; if (s.empty ()) { cout<<"堆栈为空" <<endl; } else { cout<<"堆栈不为空" <<endl; } cout<<"堆栈的最顶部元素为:" <<s.top ()<<endl; s.pop (); cout<<"将堆栈最顶部元素弹出后,现在堆栈中的元素为1、2、3" <<endl; }
stack 遍历方法 堆栈中的数据是不允许随机访问的,也就是说不能通过下标访问,且堆栈内的元素是无法遍历的。
我们可以通过while循环的方法将stack中的元素读取一遍,但是这种方法非常局限,因为我们每读取一个元素就需要弹出这个元素,因此该方法只能读取一遍stack中的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <iostream> #include <stack> using namespace std;int main () { stack<int > s; s.push (1 ); s.push (2 ); s.push (3 ); s.push (4 ); while (!s.empty ()) { cout<<s.top ()<<" " ; s.pop (); } }
queue是一种容器转换器模板,调用#include< queue>即可使用队列类。
queue初始化 queue<Type, Container > (<数据类型,容器类型>)
1 2 3 4 queue<int >q1; queue<double >q2; queue<char >q3;
queue 常用函数 1 2 3 4 5 6 push () pop () size () empty () front () back ()
优先队列是一种特殊的队列,其中的元素按照一定的优先级进行排序,每次取出的元素都是优先级最高的 。它的底层实现通常使用堆(heap)数据结构。
priority_queue初始化 1 priority_queue<int , std::vector<int >, std::less<int >> pq;
priority_queue常用函数 1 2 3 4 5 push (x); pop (); top ();empty ();size ();
priority_queue 修改比较函数 1 2 3 4 5 6 7 8 9 10 struct compare { bool operator () (int a,int b) { return a>b; } } int main () { priority_queue<int , vector<int >,compare> pq; }
1 2 3 4 5 6 auto compare=[](int a,int b){ return a>b; }; priority_queue<int ,vector<int >,decltype (compare)> pq (compare);
1 priority_queue<int vector<int >,greater<T>> pq;
双端队列,是一种在两端均可以扩展或者收缩的序列化容器。 deque可以在头部和尾部进行插入和删除操作。
deque迭代器 deque.begin():指向deque首元素的迭代器 deque.end():指向deque尾元素下一个位置的迭代器 deque.rbegin():指向deque尾元素的反向迭代器,即rbegin()指向尾元素,rbegin-1指向倒数第二个元素 deque.rend():指向deque头元素前一个位置的反向迭代器,即rend()指向头元素前一个位置元素,rbegin-1指向第一个元素 deque.cbegin():指向deque首元素的迭代器,与begin()相同,只不过增加了const属性,不能用于修改元素。 deque.cend():指向deque尾元素下一个位置的迭代器,与end()相同,只不过增加了const属性,不能用于修改元素。 deque.crbegin():指向deque尾元素的反向迭代器,与rbegin()相同,只不过增加了const属性,不能用于修改元素。 deque.crend():指向deque头元素前一个位置的反向迭代器,与rend()相同,只不过增加了const属性,不能用于修改元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #include <deque> #include <iostream> using std::cout;using std::deque;using std::endl;int main () { deque<int > test = {1 , 2 , 3 , 4 }; cout << "初始化后deque为: " ; for (auto num : test) { cout << num << " " ; } cout << endl; deque<int >::iterator begin_iterator = test.begin (); cout << "begin() 指向的元素:" << *begin_iterator << endl; auto end_iterator = test.end (); cout << "end()-1 指向的元素:" << *(end_iterator - 1 ) << endl; auto rbegin_iterator = test.rbegin (); cout << "rbegin() 指向的元素:" << *rbegin_iterator << endl; auto rend_iterator = test.rend (); cout << "rend()-1 指向的元素:" << *(rend_iterator - 1 ) << endl; deque<int >::const_iterator cbegin_iterator = test.cbegin (); cout << "cbegin() 指向的元素:" << *cbegin_iterator << endl; deque<int >::const_iterator cend_iterator = test.cend (); cout << "cend()-1 指向的元素:" << *(cend_iterator - 1 ) << endl; auto crbegin_iterator = test.crbegin (); cout << "crbegin() 指向的元素: " << *crbegin_iterator << endl; auto crend_iterator = test.crend (); cout << "crend()-1 指向的元素: " << *(crend_iterator - 1 ) << endl; return 0 ; }
deque 成员函数 1 2 3 4 5 6 7 8 9 10 11 12 push_back (x);push_front (x);pop_back ();pop_front ();front ();back ();empty ();size ();clear ();insert (pos,x);erase (pos);erase (first,last);
set 是一个有序容器,它会根据元素的键值对元素进行排序(默认按升序),并且不允许有重复的元素。其内部基于红黑树这种自平衡二叉搜索树实现。
场景 :
需要有序数据 :当你需要对数据进行排序,并且在插入和删除操作后依然保持有序状态时,set 是一个不错的选择。例如,你要对一系列整数进行排序,并且保证每个整数只出现一次。
元素查找 :由于 set 是有序的,查找操作的时间复杂度为 (O(log n))。在需要频繁查找元素是否存在的场景下,set 很合适。
去重 :如果你有一组数据,需要去除其中的重复元素,同时保持元素的有序性,set 可以自动完成去重工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 insert ()count ()size ()erase ()clear ()empty ()begin ()end ()rbegin ()rend ()find ()lower_bound ()get_allocator ()swap ()max_size ()
set迭代器遍历 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <iostream> #include <set> using namespace std;int main () { set<int > s; s.insert (1 ); s.insert (3 ); s.insert (2 ); set<int >::iterator it; for (it=s.begin ();it!=s.end ();it++){ cout<<*it<<' ' ; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <iostream> #include <set> using namespace std;int main () { set<int > s; s.insert (1 ); s.insert (3 ); s.insert (2 ); set<int >::reverse_iterator it; for (it=s.rbegin ();it!=s.rend ();it++){ cout<<*it<<' ' ; } }
foreach遍历 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <iostream> #include <set> using namespace std;int main () { set<int > s; s.insert (1 ); s.insert (3 ); s.insert (2 ); for (auto it:s){ cout<<it<<' ' ; } }
set自定义去重规则 1 2 3 4 5 6 7 8 9 struct cmp { bool operator () (const int & a, const int & b) const { if (abs (a - b) <= k) return false ; return a < b; } }; set<int , cmp> st;
multiset 同样是有序容器,基于红黑树实现,不过它允许存储重复的元素。
场景 :
允许重复元素的排序集合 :当你需要对数据进行排序,同时又允许元素重复时,multiset 就派上用场了。例如,统计某个班级学生的考试成绩,可能会有多个学生取得相同的分数。
计数和统计 :由于 multiset 可以存储重复元素,你可以方便地统计某个元素出现的次数。
multiset成员函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 s.begin () s.end () s.rbegin () s.rend () s.clear () s.empty () s.insert () s.size () erase (iterator) erase (first,second) erase (key_value) 查找 s.find (元素) s.lower_bound (k) s.upper_bound (k)
multiset遍历 1 2 for (multiset<int >::iterator it = s.begin (); it != s.end (); it++) cout << *it << " " ;
1 2 for (auto i : s) cout << i << endl;
multiset自定义排序 1 2 3 4 5 6 7 8 struct cmp { bool operator () (const int & u, const int & v) const { return u > v; } }; multiset<int , cmp> se;
unordered_set 是一个无序容器,它基于哈希表实现,元素的存储是无序的,但不允许重复元素。
场景 :
快速查找 :unordered_set 的查找操作平均时间复杂度为 (O(1)),因此在需要快速判断某个元素是否存在的场景下,unordered_set 比 set 更高效。例如,在一个大规模的数据集中查找某个特定元素。
无需排序 :当你只关心元素的存在性,而不关心元素的顺序时,unordered_set 是更好的选择。比如,判断一个单词是否在一个词典中。
初始化 1 unordered_set<int > set1;
unordered_set 常用成员函数 1. 迭代器相关函数
begin() :返回指向容器起始位置的迭代器。
end() :返回指向容器末尾位置的迭代器。
cbegin() :返回指向容器起始位置的常量迭代器。
cend() :返回指向容器末尾位置的常量迭代器。
2. 容量相关函数
empty() :检查容器是否为空,若为空则返回 true,否则返回 false。
size() :返回容器中元素的数量。
max_size() :返回容器可容纳的最大元素数量。
3. 元素访问和修改函数
insert() :向容器中插入元素。如果元素已经存在,则不插入。
erase() :从容器中移除指定元素。
clear() :清空容器中的所有元素。
swap() :交换两个 unordered_set 容器的内容。
4. 查找相关函数
find() :查找指定元素,若找到则返回指向该元素的迭代器,若未找到则返回 end() 迭代器。
count() :返回容器中指定元素的数量,由于 unordered_set 中元素唯一,因此返回值只能是 0 或 1。
5. 哈希策略相关函数
bucket_count() :返回容器中桶的数量。
load_factor() :返回容器的负载因子,即元素数量与桶数量的比值。
rehash() :设置桶的数量,并重新哈希容器中的所有元素。
map 是有序关联容器,它基于红黑树(一种自平衡二叉搜索树)实现。在 map 中,键是唯一的,并且元素会按照键的大小进行排序(默认是升序)。
map初始化 1 map<int , string> mapStudent;
map常用成员函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 begin () clear () count () empty () end () equal_range () erase () find () get_allocator () insert () key_comp () lower_bound () max_size () rbegin () rend () size () swap () upper_bound () value_comp ()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <iostream> #include <map> #include <vector> using namespace std;int main () { int n; cin >> n; map<string, vector<string>> mp; vector<string> city; for (int i = 0 ;i < n;i++) { string s1, s2; cin >> s1 >> s2; if (!mp.count (s2))city.push_back (s2); mp[s2].push_back (s1); } int len = mp.size (); for (int i = 0 ;i < len;i++) { cout << city[i]<<" " <<mp[city[i]].size ()<<endl; for (string i : mp[city[i]]) { cout << i << endl; } } return 0 ; }
multimap 同样是有序关联容器,基于红黑树实现,但它允许键重复。也就是说,一个键可以对应多个值。
场景 :
允许重复键的有序映射 :当你需要存储多个值与同一个键关联,并且希望这些键值对按照键的顺序排列时,multimap 就派上用场了。例如,统计学生的成绩,一个学生可能有多门课程的成绩。
分组与排序 :可以根据键对元素进行分组,并且每个组内的元素会按照键的顺序排列。比如,将员工按照部门进行分组,每个部门下有多个员工。 multimap允许储存具有相同键的键值对(一个key能有多个value)
默认按键的升序进行排列
multimap初始化 1 std::multimap <std::K, std::T> multimapname;
multimap常用成员函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 empty () 若容器为空,则返回true ,否则返回false 。size () 返回当前multimap容器中键值对的个数。max_size () 返回multimap容器所能容纳的键值对的最大个数,不同的操作系统,其返回值亦不同。count (key) 在当前multimap容器中,查找键为key的键值对的个数并返回。begin () 返回指向容器中第一个(已排好序的第一个)键值对的双向迭代器。end () 返回指向容器中最后一个元素(已排好序的最后一个)所在位置的后一个位置的双向迭代器。rbegin () 返回指向容器中最后一个(已排好序的最后一个)元素的反向双向迭代器。rend () 返回指向容器中第一个(已排好序的第一个)元素所在位置的前一个位置的反向双向迭代器。cbegin () 和begin ()功能相同,只不过在其基础上,增加了const 属性,不能用于修改容器内储存的键值对。cend () 和end ()功能相同,只不过在其基础上,增加了const 属性,不能用于修改容器内储存的键值对。crbegin () 和rbegin ()功能相同,只不过在其基础上,增加了const 属性,不能用于修改容器内储存的键值对。crend () 和rend ()功能相同,只不过在其基础上,增加了const 属性,不能用于修改容器内储存的键值对。find (key) 在map容器中查找键为key的键值对,若成功找到,则返回指向该键值对的双向迭代器;若未找到,则返回和end ()方法一样的迭代器。lower_bound (key) 返回一个指向当前map容器中第一个大于或等于key的键值对的双向迭代器。upper_bound (key) 返回一个指向当前map容器中第一个大于key的键值对的双向迭代器。equal_range (key) 返回一个pair对象(包含2 个双向迭代器),其中pair.first和lower_bound ()方法的返回值等价,pair.second和upper_bound ()方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含的键为key的键值对(map容器键值对唯一,因此该返回最多包含一个键值对)。insert () 向multimap容器中插入键值对。emplace () 在当前multimap容器中的指定位置处构造新键值对。其效果和插入键值对一样,但效率更高。emplace_hint () 在本质上和emplace ()在multimap容器中构造新键值对的方式是一样的,不同之处在于,必须为该方法提供一个指示键值对erase () 删除multimap容器指定位置、指定键(key)值或者指定区域内的键值对。clear () 清空multimap容器中的所有键值对。swap () 交换2 个multimap容器中存储的键值对,操作的2 个键值对的类型必须相同。
自定义排序 1 2 3 4 5 6 7 8 struct cmp { bool operator () (const string& a,const string& b) const { return stoi (a)<stoi (b); } }; multimap<string,int ,cmp> mp; mp={{"100" ,1 },{"99" ,2 }};
unordered_map unordered_map 是无序关联容器,它基于哈希表实现。键是唯一的,但元素的存储是无序的。
场景 :
快速查找 :unordered_map 的查找操作平均时间复杂度为 (O(1)),因此在需要快速根据键查找对应值的场景下,unordered_map 比 map 更高效。例如,在一个大规模的数据集中查找某个特定键对应的值。
无需排序 :当你只关心键值对的存在性和快速访问,而不关心元素的顺序时,unordered_map 是更好的选择。比如,实现一个缓存系统,快速根据键获取缓存的值。
unordered_map则适合用于需要快速查找元素的情况下,例如查找是否存在某个键值对 、统计某个值出现的次数
不保证元素的顺序
一对一
迭代器相关函数
begin() :返回指向容器中第一个元素的迭代器。
end() :返回指向容器末尾(即最后一个元素之后的位置)的迭代器。
cbegin() :返回指向容器中第一个元素的常量迭代器,不能用于修改元素。
cend() :返回指向容器末尾的常量迭代器。
容量相关函数
empty() :检查容器是否为空,若为空返回 true,否则返回 false。
size() :返回容器中元素的数量。
max_size() :返回容器可容纳的最大元素数量。
元素访问和修改函数
operator[] :通过键访问或插入元素。如果键不存在,则会插入一个默认构造的值。
at() :通过键访问元素,如果键不存在,会抛出 std::out_of_range 异常。
insert() :插入键 - 值对。可以插入单个元素、多个元素或通过迭代器范围插入。
emplace() :原位构造并插入元素,避免不必要的拷贝或移动操作。
erase() :移除指定位置的元素、指定键的元素或指定迭代器范围的元素。
clear() :清空容器中的所有元素。
swap() :交换两个 unordered_map 容器的内容。
查找相关函数
find() :查找具有指定键的元素,如果找到则返回指向该元素的迭代器,否则返回 end() 迭代器。
count() :返回具有指定键的元素数量,由于 unordered_map 中键是唯一的,所以返回值只能是 0 或 1。
哈希策略相关函数
bucket_count() :返回容器中桶的数量。
load_factor() :返回容器的负载因子,即元素数量与桶数量的比值。
rehash() :设置桶的数量,并重新哈希容器中的所有元素。
stringstream https://xas-sunny.blog.csdn.net/article/details/136921743?fromshare=blogdetail&sharetype=blogdetail&sharerId=136921743&sharerefer=PC&sharesource=2301_80155689&sharefrom=from_link
1 2 3 4 5 6 7 8 9 10 11 12 13 string s ("hello stringstream" ) ;stringstream ss; ss << s; cout << ss.str () << endl; stringstream ss ("hello stringstream" ) ;cout << ss.str () << endl;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <iostream> #include <sstream> using namespace std; int main () { stringstream ss1; ss1 << "fre" ; ss1 << "gre" ; cout << ss1. str () << endl; return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 #include <sstream> #include <iostream> #include <string> int main () { int num = 123 ; std::stringstream ss; ss << num; std::string str = ss.str (); std::cout << str << std::endl; }