vector
/*
*目的:学习vector容器的使用。
*程序输出:
hello, how are you ?
max_size(): 134217727
size(): 5
capacity(): 5
hello, you are how always !
max_size(): 134217727
size(): 6
capacity(): 7 //书上说容量会扩充一倍,即:10
*经过测试当size()达到8时,capacity()才会扩充为10。请教后知道是编译器不同导致。
*总结:reserve()可以用来尽量减少内存重新配置的次数,但不能杜绝,因此,即使使用了reserve(),
*每次执行安插或移除操作后,一定要考虑迭代器是否有效,一般会重新生成迭代器。
*而且reserve元素数量太多会浪费内存,太小或不使用会导致效率低下(会经常发生内存重新配置)。
*/
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> sentence;
vector<string>::iterator it = sentence.begin();
sentence.reserve(5);
sentence.push_back("hello,");
sentence.push_back("how");
sentence.push_back("are");
sentence.push_back("you");
sentence.push_back("?");
// 创建迭代器时容量为0,后边添加数据时发生了内存重新配置,所以it迭代器失效了,使用vector一定要谨记此条。
//it++; //error!!!!!!!!
copy(sentence.begin(), sentence.end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << "max_size(): " << sentence.max_size() << endl; //return maximum possible length of sequence。可以理解成硬件允许的最大值
cout << "size(): " << sentence.size() << endl;
cout << "capacity(): " << sentence.capacity() << endl;
swap(sentence[1], sentence[3]);
sentence.insert(find(sentence.begin(), sentence.end(), "?"), "always"); //?之前加入always
//sentence.insert(find(sentence.begin(), sentence.end(), "?"), "always"); //测试用
//sentence.insert(find(sentence.begin(), sentence.end(), "?"), "always"); //
sentence.back() = "!"; //“!”覆盖最后一个元素即“?”
copy(sentence.begin(), sentence.end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << "max_size(): " << sentence.max_size() << endl;
cout << "size(): " << sentence.size() << endl;
cout << "capacity(): " << sentence.capacity() << endl;
getchar();
}
list
/*
目的:学习List容器的使用及常用操作(splice、merge等)
*程序输出:
list1: 0 1 2 3 4 5
list2: 0 1 2 3 4 5
list1:
list2: 0 1 2 0 1 2 3 4 5 3 4 5
list1:
list2: 1 2 0 1 2 3 4 5 3 4 5 0
list1: 0 0 1 1 2 2 3 3 4 4 5 5
list2: 0 1 2 3 4 5
list1: 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
list2:
注意:splice()和merge()做的是移动操作,不是复制
*/
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
void printLists(const list<int> &l1, const list<int> &l2)
{
cout << "list1: ";
copy(l1.begin(), l1.end(), ostream_iterator<int>(cout, " "));
cout << endl << "list2: ";
copy(l2.begin(), l2.end(), ostream_iterator<int>(cout, " "));
cout <<endl << endl;
}
int main()
{
list<int> list1, list2;
for (int i = 0; i < 6; ++i)
{
list1.push_back(i);
list2.push_back(i);
}
printLists(list1, list2);
//注意:splice()和merge()做的是移动操作,不是复制
list2.splice(find(list2.begin(), list2.end(), 3), list1);
printLists(list1, list2);
list2.splice(list2.end(), list2, list2.begin());
printLists(list1,list2);
list2.sort();
list1 = list2;
list2.unique();
printLists(list1, list2);
list1.merge(list2);
printLists(list1, list2);
getchar();
}
deque
/*
目的:学习deque容器的使用。
*程序输出:
first string
string
string
string
last string
string //下标0
another string
another string
resized string //下标3,coll.size()==4;
*/
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
deque<string> coll;
coll.assign(3, string("string"));
coll.push_back("last string");
coll.push_front("first string");
copy(coll.begin(), coll.end(), ostream_iterator<string> (cout, "\n"));
cout << endl;
coll.pop_front();
coll.pop_back();
for (unsigned int i = 1; i < coll.size(); ++i)
{
coll[i] = "another " + coll[i];
}
coll.resize(4, "resized string"); // determine new length, padding with _Val elements as needed
copy(coll.begin(), coll.end(), ostream_iterator<string> (cout, "\n"));
getchar();
}