网站建设要哪些工作,国网商城怎么入驻,做网站 智域大连,做网络主播网站违法吗个人主页#xff1a;平行线也会相交#x1f4aa; 欢迎 点赞#x1f44d; 收藏✨ 留言✉ 加关注#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】#x1f48c; 本专栏旨在记录C的学习路线#xff0c;望对大家有所帮助#x1f647; 希望我们一起努力、成长平行线也会相交 欢迎 点赞 收藏✨ 留言✉ 加关注本文由 平行线也会相交 原创 收录于专栏【C之路】 本专栏旨在记录C的学习路线望对大家有所帮助 希望我们一起努力、成长共同进步。 vector是CSTL中的一种动态数组容器用于存储和操作一系列的元素。 同时vector提供了灵活的大小调整、随机访问、连续存储、动态内存管理等特点。
注意使用vector前需要包含头文件#includevector 下面将对vector的常用语法作出详细的介绍。 目录 一、vector初始化1.1一般初始化方式1.2利用迭代器进行初始化1.3利用数组指针进行初始化 二、vector的增删查改2.1增添元素-push_back()2.2删除元素-erase()2.3某个位置插入元素-insert2.4查找-find() 三、vector迭代器的使用iterator3.1遍历容器元素 四、vector容器的常用算法4.1排序 五、vector容量操作5.1reserve错误案例演示 5.2resize 一、vector初始化
1.1一般初始化方式
例1创建一个具有5个整型元素的向量
//v1是一个具有5个int类型元素大小的向量
vectorint v1(5);例2创建一个具有5个int类型元素大小的向量并要将每个元素初始化成0。
//v2是一个具有5个int类型元素大小的向量,其中每个元素都是0
vectorint v2(5, 0);例3创建5个string类型的向量并完成初始化操作。
vectorstring v(5, C);1.2利用迭代器进行初始化
例1利用相同类型的迭代器进行初始化。
利用相同类型的迭代器进行初始化
vectorint v1(10, 1);
vectorint v2(v1.begin(), v1.end());
for (auto e : v2)
{cout e ;
}例2利用不同类型的迭代器进行初始化。
//利用不同类型的迭代器进行初始化
string str(hello C);vectorint v3(str.begin(), str.end());
vectorchar v4(str.begin(), str.end());for(auto e : v3)cout e ;
cout endl;
for (auto e : v4)cout e ;
cout endl;1.3利用数组指针进行初始化
//利用数组指针进行初始化
int a[] { 1,2,3,4 };
vectorint v5(a, a 4);二、vector的增删查改
2.1增添元素-push_back()
方法1使用成员函数push_back()
vectorint v3;v3.push_back(1);v3.push_back(2);v3.push_back(3);v3.push_back(4);方法2使用for循环进行赋值
vectorint v4;
for (int i 0; i 10; i)v4.push_back(i);2.2删除元素-erase()
int a[] { 1,3,5,7,9 };
vectorint v(a, a 5);
for (auto e : v)
{cout e ;
}
cout endl;//删除第一个位置的值
v.erase(v.begin());
for (auto e : v)
{cout e ;
}
cout endl;//删除第三个位置的值
v.erase(v.begin()2);
for (auto e : v)
{cout e ;
}
cout endl;2.3某个位置插入元素-insert int a[] { 1,3,5,7,9 };
vectorint v(a, a 5);
for (auto e : v)
{cout e ;
}
cout endl;v.insert(v.begin(), 100);
for (auto e : v)
{cout e ;
}
cout endl;2.4查找-find()
这里需要注意的是 虽然vector容器本身没有直接提供查找函数即find的成员函数但通过包含algorithm头文件你可以使用find算法函数来在vector中查找元素。这是因为标准库提供了一种通用的查找函数可以在各种容器中使用。 举个例子
//查找元素
int a[] { 0,2,4,6,8,10,12 };
vectorint v(a, a sizeof(a) / sizeof(a[0]));
for (auto e : v)
{cout e ;
}
cout endl;vectorint::iterator pos find(v.begin(), v.end(), 8);
if (pos ! v.end())v.erase(pos);
for (auto e : v)
{cout e ;
}
cout endl;三、vector迭代器的使用iterator
3.1遍历容器元素
vectorint v5;v5.push_back(1);v5.push_back(2);v5.push_back(3);vectorint::iterator it v5.begin();while (it ! v5.end()){cout *it ;it;}四、vector容器的常用算法
我们知道容器可以用来存储数据而算法就是对数据进行处理。通过容器也能能够访问其中存储的数据所以我们可以通过容器来实现一些常用的算法。例如一些查找的算法、排序的算法。
4.1排序
例1升序。
//升序
int a[] { 15,9,29,3,50 };
vectorint v(a, a 5);
sort(v.begin(), v.end());
//sort(v.rbegin(), v.rend());使用反向迭代器,此时为降序
for (auto e : v)cout e ;
cout endl;例2降序。
greaterint g;
sort(v.begin(), v.end(), g);
//sort(v.rbegin(), v.rend());使用反向迭代器,此时为升序
for (auto e : v)cout e ;
cout endl; 降序这里我们其实没有必要传greaterint g这个有名对象这里完全可以用匿名对象来实现。 即sort(v.begin(), v.end(), greaterint()); 例3对string类型的对象进行排序。
string str(hello world);
sort(str.begin(), str.end());
cout str endl;五、vector容量操作
5.1reserve
reserve函数用于预留一定的容量空间以提高向vector中添加元素的效率。它通常在你知道vector将存储大量元素时使用可以避免不必要的重新分配和复制元素。 这里有一点非常重要调用reserve函数不会改变vector的大小即size()的返回值只会影响vector的容量即capacity()的返回值。 错误案例演示 下面举一个错误案例 //这是一个错误案例
vectorint v1;
v1.reserve(10);
for (size_t i 0; i 10; i)
{v1[i] i;
}v1[i] i中的[]操作会先对size进行检查即assert(i _size);。而上述代码中的size是0执行完v1.reserve(10);之后只是改变了capacity并不会对size进行改变。经过assert(i _size);的检查之后当然会报错了。 但是如果我们依然要使用reserve的话我们应该这样去使用请看 vectorint v;
v.reserve(10);
for (size_t i 0; i 10; i)
{v.push_back(i);cout v[i];
}5.2resize
resize函数用于改变vector的大小即改变size可以增加或减少元素的数量。当增加大小时新的元素会使用默认值进行初始化。
调用vector的resize函数会同时改变size和capacity。
vectorint v1;
v1.resize(10);
for (size_t i 0; i 10; i)
{v1[i] i;
}for (auto e : v1)
{cout e ;
}
cout endl;关于reserve函数和resize函数要时刻注意size和capacity的变化。开辟了空间capacity后不一定可以对其内容进行访问因为有时可能会对size的大小进行检查比如[]。
好了以上就是本文的全部内容主要对vector的一些基本语法和用法进行了介绍。 就到这里吧再见啦友友们