??1.构造函数
?测试:
void test()
{
vector<int> v;
vector<int> v1(2, 30);
string s("hello");
vector<int> v4(s.begin(), s.end());
}
??2.vector iterator 的使用
?2.1begin+end
获取第一个数据位置的iterator/const_iterator, 获取最后一个数据的下一个位置的iterator/const_iterator.
?2.2 rbegin+rend
获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的reverse_iterator. ?测试
vector<int> v;
v.push_back(2);
v.push_back(4);
v.push_back(6);
v.push_back(8);
vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
?2.3const迭代器
void print(const vector<int>& v)
{
vector<int>::const_iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
}
??3. vector 空间增长问题
capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。这个问题经常会考察,不要固化的认为,顺序表增容都是2倍,具体增长多少是根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。 reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问 题。resize在开空间的同时还会进行初始化,影响size
?3.1reserve
?3.2resize
🌟从监视窗口看出,resize开了空间也进行了初始化,具体看需求。
??4.vector 增删查改
?4.1尾插,尾删
💫尾插和尾删还是比较简单的。
?4.2 insert,operator[]
vector<int>::iterator pos = find(v.begin(), v.end(), 2);
if (pos != v.end())
{
pos = v.insert(pos, 20);
}
for (size_t i = 0; i < v.size(); ++i)
{
cout << v[i] << " ";
}
cout << endl;
🌟成功在2之前插入20
?4.3erase
🔴 insert和erase这里涉及到迭代器失效的问题,留着模拟实现vector的时候在 讲。
|