可用于拼接多个vector
====================合并======================
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int>& v, const char* mark) {
cout << "------------ " << mark << " ------------" << endl;
size_t len = v.size();
for (size_t i = 0; i < len; i++) {
cout << v[i] << endl;
}
}
int main()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 5; i++) {
v1.push_back(i);
if (i % 2 == 1) {
v2.push_back(i * 10);
}
}
print(v1, "v1");
print(v2, "v2");
vector<int> v3;
v3.insert(v3.end(), v1.begin(), v1.end());
v3.insert(v3.end(), v2.begin(), v2.end());
print(v3, "v3");
}
结果:
------------ v1 ------------
0
1
2
3
4
------------ v2 ------------
10
30
------------ v3 ------------
0
1
2
3
4
10
30
请按任意键继续. . .
=======================赋值==========================
------------ v1 ------------
0
1
2
3
4
------------ v2 ------------
10
30
------------ v3 ------------
0
1
2
3
4
10
30
请按任意键继续. . .
=======================赋值==========================
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
template<typename T>
void vecPrint(const vector<T>& vec)
{
cout << "{";
for(typename vector<T>::const_iterator p = vec.begin(); p != vec.end(); p++)
{
cout << "{" << *p << "}";
}
cout << "}" << endl;
}
int main()
{
vector<string> vec(5);
string foo[] = {"My", "way", "or", "the", "highway"};
vec[0] = "today";
vec[1] = "is";
vec[2] = "a";
vec[3] = "new";
vec[4] = "day";
vector<string> vec2(vec);
vecPrint(vec2);
vec.at(0) = "Tomorrow";
//vec的内容覆盖了vec2的
vec2.assign(vec.begin(), vec.end());//Copy each element over with assign
vecPrint(vec2);
vec2.assign(&foo[0], &foo[5]);//覆盖了vec2
vecPrint(vec2);
vector<string>::iterator p;
p = find(vec.begin(), vec.end(), "new");
vec2.assign(vec.begin(), p);
vecPrint(vec2);
return 0;
}
结果:
{{today}{is}{a}{new}{day}}
{{Tomorrow}{is}{a}{new}{day}}
{{My}{way}{or}{the}{highway}}
{{Tomorrow}{is}{a}}
请按任意键继续. . .
//insert与merge的比较
merge方式要注意三点:
1、vec1,和vec2需要经过排序,merge只能合并排序后的集合,不然会报错。
2、vec3需要指定好大小,不然会报错。
3、merge的时候指定vec3的位置一定要从begin开始,如果指定了end,它会认为没有空间。
vector<string>vec1,vec2,vec3;
//... vec1,vec2赋值insert
vec3.insert(vec3.end(),vec1.begin(),vec1.end());
vec3.insert(vec3.end(),vec2.begin(),vec2.end());
vector<string>vec1,vec2,vec3;
//... vec1,vec2赋值merge
sort(vec1.begin(),vec1.end());
sort(vec2.begin(),vec2.end());
vec3.resize(vec1.size()+vec2.size());
merge(vec1.begin(),vec1.end(),vec2.begin(),vec2.end(),vec3.begin());
I.指定大小的初始化赋值
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int>::const_iterator beg, vector<int>::const_iterator end)
{
while(beg != end)
{
cout<<*beg++;
if(beg != end)
cout<<" ";
else cout<<"|";
}
cout<<endl;
}
void main()
{
vector<int>ivec1(10,42); //内置方法,初始化的内容为10个42
print(ivec1.begin(),ivec1.end());
vector<int>ivec2(10);
vector<int>::size_type ix=0;
for(ix;ix<10;++ix)
{
ivec2[ix]=42; //下标操作
}
print(ivec2.begin(),ivec2.end());
vector<int>ivec3(10);
for(vector<int>::iterator iter=ivec3.begin();iter!=ivec3.end();++iter)
{
*iter=42; //迭代器
}
print(ivec3.begin(),ivec3.end());
II下面两种方法最佳,他们使用标准库定义的操作,无须再定义vector对象时指定容器的大小。比较灵活且不容易出错.
方法一:
vector<int>ivec4;
vector<int>::iterator iter=ivec4.end();
for(int i=0;i!=10;++i)
{
ivec4.insert(iter,42); //在指定位置iter前插入值为的元素,返回指向这个元素的迭代器,
iter=ivec4.end();
}
print(ivec4.begin(),ivec4.end());
vector<int>ivec5;
vector<int>::size_type cnt=1;
for(cnt;cnt<=10;++cnt)
{
ivec5.push_back(42); //push_back()添加值为的元素到当前vector末尾
}
print(ivec5.begin(),ivec5.end());
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
vector<int> ivec5(arr,arr+10); // 数组数值
print(ivec5.begin(),ivec5.end());
}
方法二:
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int>::const_iterator beg, vector<int>::const_iterator end)
{
while(beg != end)
{
cout<<*beg++;
if(beg != end)
cout<<" ";
else cout<<"|";
}
cout<<endl;
}
void main()
{
vector<int>ivec1(10,42); //内置方法,初始化的内容为10个42
print(ivec1.begin(),ivec1.end());
vector<int>ivec2(10);
vector<int>::size_type ix=0;
for(ix;ix<10;++ix)
{
ivec2[ix]=42; //下标操作
}
print(ivec2.begin(),ivec2.end());
vector<int>ivec3(10);
for(vector<int>::iterator iter=ivec3.begin();iter!=ivec3.end();++iter)
{
*iter=42; //迭代器
}
print(ivec3.begin(),ivec3.end());