您的位置:首页 > 教育 > 培训 > 宁波建网站选哪家好一点_做啊免费网站_seo网站诊断流程_怎么建个网站

宁波建网站选哪家好一点_做啊免费网站_seo网站诊断流程_怎么建个网站

2024/12/15 6:08:19 来源:https://blog.csdn.net/qq_55890817/article/details/143695870  浏览:    关键词:宁波建网站选哪家好一点_做啊免费网站_seo网站诊断流程_怎么建个网站
宁波建网站选哪家好一点_做啊免费网站_seo网站诊断流程_怎么建个网站

一、什么是vector

        vector是表示可变大小的数组的序列容器,就像数组一样,vector也采用连续空间来存储元素。也就是说它的访问和数组一样高效,但是它的大小是动态可变的,并且它的大小会被容器自动处理

二、vector的构造

        常用的构造函数:

构造函数声明接口声明
vector()无参构造函数
vector(size_type n, const value_type& val=value_type())构造并初始化n个val
vector(const vector& x)拷贝构造函数
vector(InputIterator first,InputIterator last)使用迭代器进行初始化构造

        笔者想要特别提一下这种构造方式:

vector(size_type n, const value_type& val=value_type())

         这里如果没有显式提供要初始化实例,则会调用该类型的默认构造函数进行初始化,如果是整型则会默认初始化为0,如果是自定义类型:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
class A
{
public:int a;int b;int c;A():a(1),b(2),c(3){}
};
int main()
{A k;k.a = 4;k.b = 3;vector<A> v1(1,k);cout << v1[0].a << " " << v1[0].b << " " << v1[0].c << endl;vector<A> v2(1);cout << v2[0].a << " " << v2[0].b << " " << v2[0].c << endl;return 0;
}

 输出结果为:

        可以看到,如果是自定义类型给出第二个参数会进行拷贝构造,不给则会进行默认构造。 

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{vector<int> v1;//无参构造vector<int> v2(10, 1);//构造并初始化为1vector<int> v3(10);//构造,不给参数会根据元素的类型进行默认初始化vector<int> v4(v2);//拷贝构造string s1("hello world");vector<int> v5(s1.begin(), s1.end());//这样可行吗?里面存储的是什么?
}

三、vector的迭代器

iterator的使用接口说明
begin+endbegin获取第一个数据的位置,end获取最后一个数据的下一个位置
rbegin+rendrbegin获取最后一个数据的位置,rend获取第一个数据的前一个位置

函数原型:

iterator begin() noexcept;
const_iterator begin() const noexcept;iterator end() noexcept;
const_iterator end() const noexcept;reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;

 迭代器的使用:

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{int k = 0;vector<int> v1(10);for (auto& i : v1){i += k;++k;}vector<int>::iterator it = v1.begin();//auto it = v1.begin()也可以写成这样while (it != v1.end()){cout << *it << " ";++it;}cout << endl;vector<int>::reverse_iterator it2 = v1.rbegin();while (it2 != v1.rend()){cout << *it2 << " ";++it2;}
}

 输出结果为:

四、vecotr的容量

容量空间接口说明
size获取已存在的数据的个数
capacity获取最多能容纳的数据的个数
empty判断容器是否为空
resize改变vector的size
reserve改变capacity或者预留空间

函数原型:

size_type size() const noexcept;size_type capacity() const noexcept;bool empty() const noexcept;void resize (size_type n);
void resize (size_type n, const value_type& val);void reserve (size_type n);

 容量相关的函数使用:

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{vector<int> v1(10,1);cout << "初始:" <<endl;cout << "v1.size():" << v1.size() << endl;cout << "v1.capacity():" << v1.capacity() << endl;v1.reserve(20);cout << "扩容:" << endl;cout << "v1.size():" << v1.size() << endl;cout << "v1.capacity():" << v1.capacity() << endl;v1.reserve(5);cout << "reverse减少空间:" << endl;cout << "v1.size():" << v1.size() << endl;cout << "v1.capacity():" << v1.capacity() << endl;v1.resize(5);cout << "resize减少空间:" << endl;cout << "v1.size():" << v1.size() << endl;cout << "v1.capacity():" << v1.capacity() << endl;
}

 输出结果:

     可以发现,reverse函数只能扩容,不能进行容量缩减,resize函数可以减少size但是不能改变分配的内存空间的大小。   

五、vector的增删查改   

crud函数接口说明
push_back在尾部插入一个数据

       pop_back

删除尾部的一个数据
find查找一个函数第一次出现的下标,但是不是vector的成员
insert在给定的pos前插入一个元素
erase删除给定的pos位置的元素
swap交换两个vector的数据空间
operator[]能够像数组一样访问vector

函数原型:

void push_back (const value_type& val);void pop_back();template <class InputIterator, class T>InputIterator find(InputIterator first, InputIterator last, const T& value);iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, size_type n, const value_type& val); 
template <class InputIterator>iterator insert (const_iterator position, InputIterator first, InputIterator last);iterator erase (const_iterator position);//擦除对应位置的一个
iterator erase (const_iterator first, const_iterator last);//擦除迭代器对应的一段void swap (vector& x);reference operator[] (size_type n);
const_reference operator[] (size_type n) const;

函数的使用:

push_back函数与pop函数:

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{vector<int> v(10);v.push_back(10);cout << "插入后:";for (auto i : v){cout << i << " ";}v.pop_back();v.pop_back();cout << endl;cout << "删除后:";for (auto i : v){cout << i << " ";}return 0;
}

输出结果:

find函数:

        find函数实际上是算法标准库中的一个函数,不是任何一个容器的成员函数。它返回一个迭代器,如果找到则返回对应元素的一个迭代器,否则返回传入的第二个参数,可以配合insert函数和erase函数使用。

template <class InputIterator, class T>InputIterator find(InputIterator first, InputIterator last, const T& value);
#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{vector<int> v = { 1,2,3,4,5,6,3,8,9 };auto it = find(v.begin(), v.end(), 3);if (it != v.end())cout << "发现" << *it << "在位置:" << it - v.begin();elsecout << "没有发现";return 0;
}

 输出结果为:

insert函数:

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{int k = 0;vector<int> v(10);for (auto& i : v){i = k;++k;}vector<int> v1(10,1);vector<int> v2(10, 1);vector<int> v3(10, 1);v1.insert(v1.begin() + 2, 10);//只增加一个数据v2.insert(v2.begin()+2, 2,10);//增加自定义个数据v3.insert(v3.begin() + 2, v.begin() + 1, v.begin() + 7);//使用迭代器进行插入cout << "v1:";for (auto i : v1){cout << i << " ";}cout << endl;cout << "v2:";for (auto i : v2){cout << i << " ";}cout << endl;cout << "v3:";for (auto i : v3){cout << i << " ";}return 0;
}

输出结果为:

erase函数: 

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{vector<int> v1 = { 1,2,3,4,5,6,7,8,9 };vector<int> v2 = { 1,2,3,4,5,6,7,8,9 };v1.erase(v1.begin() + 2);cout << "v1删除后:";for (auto i : v1){cout << i << " ";}cout << endl;v2.erase(v2.begin() + 2, v2.begin() + 5);cout << "v2删除后:";for (auto i : v2){cout << i << " ";}return 0;
}

输出结果为:

swap函数: 

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{vector<int> v1 = { 1,2,3,4,5 };vector<int> v2 = { 5,6,7,8,9 };v1.swap(v2);cout << "v1:";for (auto i : v1){cout << i << " ";}cout << endl;cout << "v2:";for (auto i : v2){cout << i << " ";}return 0;
}

输出结果:

operator[]: 

        可以通过[]像数组那样访问vector:

#include<iostream>
#include<vector>
#include<string>
using namespace std;int main()
{vector<int> v1 = { 1,2,3,4,5,6,7,8,9};for (int i = 0; i < v1.size(); ++i)cout << v1[i] << " ";return 0;
}

输出结果为:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com