本篇文章主要介绍了"实战c++中的vector系列--copy set to vector别混淆了reserve和resize",主要涉及到Iterator,迭代器方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
stl算法中有个copy函数,我们可以轻松的写出这样的代码:#include #include
#include#include#includeint main()
{
std::set <double> input;
input.insert(5);
input.insert(6);
std::vector <double> output(2);//指明大小std::copy(input.begin(), input.end(), output.begin());
std::cout << output.size() << std::endl;
return0;
}
方法二:使用back_inserter
back_inserter 是Iterator适配器,它使得元素被插入到作为实参的某种容器的尾部
#include#include#include#include<Iterator>int main()
{
std::set <double> input;
input.insert(5);
input.insert(6);
std::vector <double> output;
std::copy(input.begin(), input.end(), std::back_inserter(output));
std::cout << output.size() << std::endl;
return0;
}
再继续vetor to vector:
#include#include#include#include<Iterator>
int main()
{
std::vector<std::string> v, orig;
orig.push_back("first");
orig.push_back("second"); v = orig;
v.insert(v.end(), v.begin(), v.end());
// Now v contains: { "first", "second", "", "" }
v = orig;std::copy(v.begin(), v.end(), std::back_inserter(v)); v = orig;
v.reserve(v.size() * 2);
v.insert(v.end(), v.begin(), v.end());
// Now v contains: { "first", "second", "first", "second" }
v = orig;
v.reserve(v.size() * 2);std::copy(v.begin(), v.end(), std::back_inserter(v));
// Now v contains: { "first", "second", "first", "second" }
// GOOD (best):
v = orig;
v.insert(v.end(), orig.begin(), orig.end()); // note: we use different vectors here
// Now v contains: { "first", "second", "first", "second" }
return 0;
}
再看这个:如果不resize,就会崩溃,把resize换成reserve也会崩溃,和解?
#include #include #include usingnamespacestd;
int main()
{
int myints[] = { 10, 20, 30, 40, 50, 60, 70 };
vector<int> myvector;
vector<int>::Iterator it;
//myvector.resize(7); // 为容器myvector分配空间 ,不resize会崩溃 copy(myints, myints + 7, myvector.begin());
cout << "myvector contains: ";
for (it = myvector.begin(); it != myvector.end(); ++it)
{
cout << " " << *it;
}
cout << endl;
return0;
}
================================================================
vector有reserve何resize,二者何为不同?