64,637
社区成员
发帖
与我相关
我的任务
分享
void UploadCheckInTobacco::set_check_in_tobacco(std::vector<CheckInTobaccoDetail> & check_in_tobacco_vector)
{
check_in_tobacco_vector_.clear();
std::vector<CheckInTobaccoDetail>::iterator iterator;
for (iterator = check_in_tobacco_vector.begin(); iterator != check_in_tobacco_vector.end(); ++iterator)
check_in_tobacco_vector_.push_back(*iterator);
}
void UploadCheckInTobacco::set_check_in_tobacco(std::vector<CheckInTobaccoDetail> & check_in_tobacco_vector)
{
check_in_tobacco_vector_.clear();
copy(check_in_tobacco_vector.begin(),
check_in_tobacco_vector.end(),
back_inserter(check_in_tobacco_vector_));
}
void UploadCheckInTobacco::set_check_in_tobacco(std::vector<CheckInTobaccoDetail> check_in_tobacco_vector)
{
check_in_tobacco_vector_.swap(check_in_tobacco_vector);
}
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
class foo
{
public:
vector<int> vec_;
void set_vec0(vector<int>& vec);
void set_vec1(vector<int>& vec);
void set_vec2(vector<int>& vec);
void set_vec3(vector<int> vec);
void set_vec4(vector<int>& vec);
void print();
};
void foo::set_vec0(vector<int>& vec)
{
vec_=vec;
print();
}
void foo::set_vec1(vector<int>& vec)
{
vec_.clear();
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
{
vec_.push_back(*it);
}
print();
}
void foo::set_vec2(vector<int>& vec)
{
vec_.clear();
copy(vec.begin(), vec.end(), back_inserter(vec_));
print();
}
void foo::set_vec3(vector<int> vec)
{
vec_.swap(vec);
print();
}
void foo::set_vec4(vector<int>& vec)
{
vec_.assign(vec.begin(), vec.end());
print();
}
void foo::print()
{
int i=0;
for (vector<int>::iterator it = vec_.begin(); it != vec_.end(); ++it)
{
cout<<*it;
if((i+1)%5!=0)
{
cout<<'\t';
}
else
{
cout<<endl;
}
i++;
}
cout<<endl;
}
int main()
{
int a[7]={0,1,2,3,4,5,6};
vector<int> vec(a,a+7);
foo c;
c.set_vec0(vec);
c.set_vec1(vec);
c.set_vec2(vec);
c.set_vec3(vec);
c.set_vec4(vec);
return 0;
}
void UploadCheckInTobacco::set_check_in_tobacco(std::vector<CheckInTobaccoDetail> check_in_tobacco_vector)
{
check_in_tobacco_vector_.assign(check_in_tobacco_vector.begin(), check_in_tobacco_vector.end());
}
挨个push_back也好,copy也好(back_inserter实际也只不过是push_back的包装),都可能会因为容量变大而出现多次内存分配,而容器自己提供的assign没有这个问题
就算是3的拷贝构造方式,实际上内部也是调用了赋值的过程,与assign的方法的区别在于,assign内部是先清空再插入,没有构造和析构,而拷贝构造是直接插入,需要构造和析构