顺序容器赋值运算
一、迭代器賦值(obj.assign(s.begin(),s.end()))
功能:利用順序容器s的迭代器s.begin()和s.end()給obj賦值.
#include <iostream> #include <string> #include <vector> #include <deque> #include <list> #include <forward_list> #include <string> #include <array> using namespace std; #define LENGTH 10 typedef int TYPE; typedef vector<TYPE> VECTORTYPE; typedef deque<TYPE> DEQUETYPE; typedef list<TYPE> LISTTYPE; typedef forward_list<TYPE> FORWARD_LISTTYPE; typedef array<TYPE,LENGTH> ARRAYTYPE; void print(VECTORTYPE & ); void print(DEQUETYPE & ); void print(LISTTYPE & ); void print(FORWARD_LISTTYPE & ); void print(ARRAYTYPE & ); void print(string &);int main() {vector<int> v_int = {1,2,3,4,5,6,7,8,9},v_int1,v_int2,v_int3,v_int4,v_int5,v_int6;deque<int> d_int = {11,12,13,14,15,16,17,18,19},d_int1,d_int2,d_int3,d_int4,d_int5;list<int> l_int = {21,22,23,24,25,26,27,28},l_int1;forward_list<int> for_int = {31,32,33,34,35,36,37,38},for_int1;array<int,LENGTH> a_int = {41,42,43,44,45,46},a_int1,a_int2,a_int3,a_int4,a_int5,a_int6;string s_int{"12345678"},s_int1;d_int1.assign(v_int.begin(),v_int.end());s_int1.assign(s_int.begin(),s_int.end());print(s_int1);d_int1.assign({111,222,333,444,555});//according to the object order of vector\deque\list\forward_list\array\string//vector object can use all the other object(list,forward_list,deque,array) to assign value.f.g:v_int1.assign(d_int.begin(),d_int.end());v_int2.assign(l_int.begin(),l_int.end());v_int3.assign(for_int.begin(),for_int.end());v_int4.assign(a_int.begin(),a_int.end());print(v_int1);print(v_int2);print(v_int3);print(v_int4);print(v_int5);d_int1.assign(v_int.begin(),v_int.end());d_int2.assign(d_int.begin(),d_int.end());d_int3.assign(l_int.begin(),l_int.end());d_int4.assign(for_int.begin(),for_int.end());d_int5.assign(a_int.begin(),a_int.end());print(d_int1);print(d_int2);print(d_int3);print(d_int4);print(d_int5);// a_int1.assign(v_int);錯誤,array對象不能調用assign函數,但是array對象可以通過迭代器給 //其它非array對象通過assign對象賦值 // a_int2.assing(d_int);同上 // a_int3.assign(l_int);同上 // a_int4.assign(for_int);同上 // a_int5.assign(a_int);同上 // print(a_int1); // print(a_int2); // print(a_int3); // print(a_int4); // print(a_int5);l_int1.assign(v_int.begin(),v_int.end());l_int2.assign(d_int.begin(),d_int.end());l_int3.assign(l_int.begin(),l_int.end());l_int4.assign(for_int.begin(),for_int.end());l_int5.assign(a_int.begin(),a_int.end());l_int6.assign(s_int.begin(),s_int.end());//這里的s_int是string對象,string對象的元素是字符,會轉化成int,請務必注意cout << " list 's assign" << endl;print(l_int1);print(l_int2);print(l_int3);print(l_int4);print(l_int5);for_int1.assign(v_int.begin(),v_int.end());for_int2.assign(d_int.begin(),d_int.end());for_int3.assign(l_int.begin(),l_int.end());for_int4.assign(for_int.begin(),for_int.end());for_int5.assign(a_int.begin(),a_int.end());for_int6.assign(s_int.begin(),s_int.end());print(for_int1);print(for_int2);print(for_int3);print(for_int4);print(for_int5);print(for_int6);//string objects_int1.assign(v_int.begin(),v_int.end());s_int2.assign(d_int.begin(),d_int.end());s_int3.assign(l_int.begin(),l_int.end());s_int4.assign(for_int.begin(),for_int.end());s_int5.assign(a_int.begin(),a_int.end());cout << "begin to print string object." << endl;print(s_int1);print(s_int2);print(s_int3);print(s_int4);print(s_int5);cout <<char(49) << endl;cout << char(50) << endlcout << "last one" << endl;cout << "s_int ' value is:" << s_int << endl;print(l_int6);return 0; } void print(VECTORTYPE &vec) {for(VECTORTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(DEQUETYPE &vec) {for(DEQUETYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(LISTTYPE &vec) {for(LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(FORWARD_LISTTYPE &vec) {for(FORWARD_LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(ARRAYTYPE &vec) {for(ARRAYTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(string & s_vec) {for(string::iterator i = s_vec.begin(); i != s_vec.end() ; ++i) {cout << *i << " ";}cout << endl; }結論:
1.a_int1.assign(v_int);//這里a_int1是個array對象
錯誤,array對象不能調用assign函數,但是array對象可以通過迭代器給其它非array對象通過assign對象賦值
例如:array_object.assign(some_object);//錯誤,array對象沒有assign這個成員函數
2. l_int6.assign(s_int.begin(),s_int.end());//這里的s_int是string對象,string對象的元素是字符,會轉化成int,請務必注意
3.string對象和其它對象都可以調用assign利用迭代器進行給對方賦值。但是結果是元素類型之間的轉化。string對象的元素類型是char,而其它容器的類型,要具體看是什么類型容器。
舉例1:array<int,5>? arr_1{1,2,3,4,5};
? ? ? ? ? ?string s1;
? ? ? ? ? ?s1.assign(arr_1.begin(),arr_1.end());那么結果會把1,2,3,4,5轉換成字符(char型),給s1賦值。結果不可顯示。
?舉例2:string s2 = "12345";
? ? ? ? ? ?list<int> list_1;
? ? ? ? ?list_1.assign(s2.begin(),s2.end());那么結果會把s2中的元素(char型)1、2、3、4、5轉換成int,分別是49,50,51,52,53.
???
二、利用seq.assign(i1)將seq中的元素替換為初始化列表i1中的元素。
#include <iostream> #include <string> #include <vector> #include <deque> #include <list> #include <forward_list> #include <string> #include <array> using namespace std; #define LENGTH 10 typedef int TYPE; typedef vector<TYPE> VECTORTYPE; typedef deque<TYPE> DEQUETYPE; typedef list<TYPE> LISTTYPE; typedef forward_list<TYPE> FORWARD_LISTTYPE; typedef array<TYPE,LENGTH> ARRAYTYPE; void print(VECTORTYPE & ); void print(DEQUETYPE & ); void print(LISTTYPE & ); void print(FORWARD_LISTTYPE & ); void print(ARRAYTYPE & ); void print(string &);int main() {vector<int> v_int{1,2,3,4,5,6},v_int1;deque<int> d_int{1,2,3,4,5,6},d_int1;list<int> l_int{1,2,3,4,5,6},l_int1;forward_list<int> f_int{1,2,3,4,5,6},f_int1;string s1{"12345"},s2;array<int,5> a_int{1,2,3,4,5},a_int1;v_int1.assign({1,2,3,4,5,6});d_int1.assign({1,2,3,4,5});l_int.assign({1,3,4,5,6,7});f_int1.assign({1,2,3,4,5,6});s1.assign("abcdefg");print(v_int1);print(d_int1);print(l_int);print(f_int1);print(s1);return 0; } void print(VECTORTYPE &vec) {for(VECTORTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(DEQUETYPE &vec) {for(DEQUETYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(LISTTYPE &vec) {for(LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(FORWARD_LISTTYPE &vec) {for(FORWARD_LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(ARRAYTYPE &vec) {for(ARRAYTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(string & s_vec) {for(string::iterator i = s_vec.begin(); i != s_vec.end() ; ++i) {cout << *i << " ";}cout << endl; }總結:對于seq.assign({?... });//結果是用{...}初始化順序容器對象seq.除了array,其它容器都可以.
3.seq.assign(n,t);//給seq賦值為n個元素t.t是seq的元素類型.
#include <iostream> #include <string> #include <vector> #include <deque> #include <list> #include <forward_list> #include <string> #include <array> using namespace std; #define LENGTH 10 typedef int TYPE; typedef vector<TYPE> VECTORTYPE; typedef deque<TYPE> DEQUETYPE; typedef list<TYPE> LISTTYPE; typedef forward_list<TYPE> FORWARD_LISTTYPE; typedef array<TYPE,LENGTH> ARRAYTYPE; void print(VECTORTYPE & ); void print(DEQUETYPE & ); void print(LISTTYPE & ); void print(FORWARD_LISTTYPE & ); void print(ARRAYTYPE & ); void print(string &);int main() {vector<int> v_int{1,2,3,4,5,6},v_int1;deque<int> d_int{1,2,3,4,5,6},d_int1;list<int> l_int{1,2,3,4,5,6},l_int1;forward_list<int> f_int{1,2,3,4,5,6},f_int1;string s1{"12345"},s2;array<int,5> a_int{1,2,3,4,5},a_int1;//vectorv_int1.assign(10,5);print(v_int1);//dequed_int1.assign(11,6);print(d_int1);//forward_listf_int1.assign(12,3);print(f_int1);//forward_litf_int1.assign(4,2);print(f_int1);//strings1.assign(10,'a');s1.assign(5,2);print(s1);return 0; } void print(VECTORTYPE &vec) {for(VECTORTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(DEQUETYPE &vec) {for(DEQUETYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(LISTTYPE &vec) {for(LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(FORWARD_LISTTYPE &vec) {for(FORWARD_LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(ARRAYTYPE &vec) {for(ARRAYTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(string & s_vec) {for(string::iterator i = s_vec.begin(); i != s_vec.end() ; ++i) {cout << *i << " ";}cout << endl; }總結:如果是string對象,則要注意,string對象可有把int類型轉化過去。這其中利用了 int -> char 類型轉化。比如49轉化為1,50轉化為2.。。
?
總結
- 上一篇: XHTML文档结构
- 下一篇: HTML <!DOCTYPE> 标签