当前位置: 首页> 科技> 数码 > 动态网页是什么_什么推广方法是有效果的_百度浏览器广告怎么投放_购物网站网页设计

动态网页是什么_什么推广方法是有效果的_百度浏览器广告怎么投放_购物网站网页设计

时间:2025/9/9 13:24:30来源:https://blog.csdn.net/qwer55588/article/details/144836543 浏览次数:0次
动态网页是什么_什么推广方法是有效果的_百度浏览器广告怎么投放_购物网站网页设计

如果把string容器掌握的差不多的话那么我相信对于vector这个容器也差不多

下面我们来介绍一下vector

vector的使用

下面我们来说一下vector的构造函数

其实vector和string是差不多的差不多多了一个参数在构造的时候要制定的熟悉其实就是泛型他同样支持迭代器区间来初始化这个大家可以课下自己去尝试一下如果不太了解可以查阅下面这个参考文献

construct

下面来了解一下vector的迭代器区间的使用

iterator 的使
接口说明
begin +
end (重点)
获取第一个数据位置的 iterator/const_iterator , 获取最后一个数据的下
一个位置的 iterator/const_iterato
rbegin +
rend
获取最后一个数据位置的 reverse_iterator ,获取第一个数据前一个位置
reverse_iterator

他同样支持范围for和用迭代器来遍历

下面我们来介绍一下vector的空间增长问题

容量空间
接口说明
size
获取数据个数
capacity
获取容量大小
empty
判断是否为空
resize (重点)
改变 vector 的size
reserve (重点)
改变 vector 的capacity
capacity 的代码在 vs g++ 下分别运行会发现, vs capacity 是按 1.5 倍增长的, g++ 是按 2
倍增长的 。这个问题经常会考察,不要固化的认为, vector 增容都是 2 倍,具体增长多少是
根据具体的需求定义的。 vs PJ 版本 STL g++ SGI 版本 STL
reserve 只负责开辟空间,如果确定知道需要用多少空间, reserve 可以缓解 vector 增容的代
价缺陷问题。
resize 在开空间的同时还会进行初始化,影响 size
void TestVectorExpand()
{
size_t sz;
vector<int> v;
sz = v.capacity();
cout << "making v grow:\n";
for (int i = 0; i < 100; ++i)
{
v.push_back(i);
if (sz != v.capacity())
{
sz = v.capacity();
cout << "capacity changed: " << sz << '\n';
}
}
}
vs:运行结果:vs下使用的STL基本是按照1.5倍方式扩容
making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 3
capacity changed: 4
capacity changed: 6
capacity changed: 9vector增删查改 接口说明
push_back(重点) 尾插
pop_back (重点) 尾删
find 查找。(注意这个是算法模块实现,不是vector的成员接口)
insert 在position之前插入val
erase 删除position位置的数据
swap 交换两个vector的数据空间
operator[] (重点) 像数组一样访问
vector容量接口使用代码演示
1.2.3 vector 增删查改
capacity changed: 13
capacity changed: 19
capacity changed: 28
capacity changed: 42
capacity changed: 63
capacity changed: 94
capacity changed: 141

其他的和string容器其实差不多这里就不多介绍了可以查看我的上一篇文章

有兴趣的可以点开下面链接

vector容量接口使用代码演示

vector 增删查改
vector 增删查改
接口说明
push_back (重点)
尾插
pop_back (重点)
尾删
find
查找。(注意这个是算法模块实现,不是 vector 的成员接口)
insert
position 之前插入 val
erase
删除 position 位置的数据
swap
交换两个 vector 的数据空间
operator[] (重点)
像数组一样访问

这些代码同学们可以线下自己实践一下一敲出来就很容易懂了

我就简单的写几个

下面我放上vector底层实现的代码

vector.h#pragma once
#include<iostream>
#include<string>
#include<vector>
#include<assert.h>
#include<stdbool.h>
using namespace std;
namespace xi{template<typename T>class vector{public:typedef T* iterator;typedef T* const_iterator;iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin()const{return _start;}const_iterator end()const{return _finish;}vector():_start(nullptr),_finish(nullptr),_endofstorage(nullptr){}vector(const vector<T>& v){reserve(v.capacity());for (auto& e : v){push_back(e);}}/*	vector(const std::initializer_list<T> list):_start(nullptr), _finish(nullptr), _endofstorage(nullptr){reserve(this->capacity());for (const T &i: list) {push_back(i);}}*/vector(initializer_list<T> il){reserve(il.size());for (auto e : il){push_back(e);}}template<typename inputiterator>vector(inputiterator first, inputiterator last){while (first != last){push_back(*first);first++;}}~vector(){if (_start != nullptr){delete[] _start;_start = _finish = _endofstorage = nullptr;}}void swap(vector<T>& tmp){std::swap(_start, tmp._start);std::swap(_finish, tmp._finish);std::swap(_endofstorage, tmp._endofstorage);}vector<T>& operator=(vector<T> v){swap(v);return *this;}//vector<T>& operator=(const std::initializer_list<T> list) {//	cout <<//		"------j" << endl;//	return *this;//}T& operator[](size_t i){assert(i < size());return _start[i];}size_t size() const{return _finish - _start;}size_t capacity() const{return _endofstorage - _start;}void resize(size_t n, T val = T()){if (n < size()){_finish = _start + n;}else{reserve(n);while (n){while (_finish < _start + n){*_finish = val;++_finish;}n--;}}}void reserve(size_t n){if (n > capacity()){size_t oldsize = size();T* tmp = new T[n];if (_start){for (size_t i = 0; i < oldsize; i++){tmp[i] = _start[i];}}_start = tmp;_finish = _start + oldsize;_endofstorage = _start + n;}}void push_back(const T& x){if (_finish == _endofstorage){reserve(capacity() == 0 ? 4 : capacity() * 2);			}*_finish = x;_finish++;}bool empty(){return _start == _finish;}void pop_back(){assert(!empty());_finish--;}void insert(iterator pos, const T& x){assert(pos <=_finish&&pos>=_start);if (_finish == _endofstorage){size_t len = pos - _start;reserve(capacity() == 0 ? 4 : capacity() * 2);pos = len + _start;}iterator i = _finish - 1;while (i >= pos){*(i + 1) = *i;--i;}*pos = x;_finish++;}iterator erase(iterator pos){assert(pos < _finish && pos >= _start);/*iterator i = _finish - 1;while (pos<=i){*pos = *(pos + 1);pos++;}_finish--;*/iterator i = pos + 1;while (i<_finish){*(i - 1) = *i;i++;}_finish--;return pos;}private:iterator _start;iterator _finish;iterator _endofstorage;};void test_vecotr1(){vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);/*v1.push_back(4);v1.push_back(4);*/v1.resize(10);for (int i = 0; i < v1.size(); i++){cout << v1[i] <<" ";}cout << endl;v1.resize(15, 5);for (int e : v1){cout << e << " ";}cout << endl;/*v1.pop_back();*//*v1.insert(v1.begin()+1, 3);*//*v1.erase(v1.begin()+2);*//*for (int e : v1){cout << e << " ";}int x;cin >>x;auto it = find(v1.begin(), v1.end(), x);*//*if (it != v1.end()){v1.insert(it, x * 10);}*//*if (it != v1.end()){v1.erase(it);cout << *it << endl;}*//*auto q = v1.begin();while (q != v1.end()){if (*q % 2 == 0){q = v1.erase(q);}else{++q;}}*//*	for (int e : v1){cout << e << " ";}*/}void test_vector2(){vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);for (auto e : v1){cout << e << " ";}cout << endl;vector<int>v2(v1);for (auto e : v2){cout << e << " ";}cout << endl;vector<int> v3 ={ 10,20,30,40 };for (auto e : v3){cout << e << " ";}cout << endl;vector<int>v4 = v3;for (auto e : v4){cout << e << " ";}}void test_vector3(){vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);vector<int>v2 (v1.begin(), v1.end());for (auto e : v1){cout << e << " ";}cout << endl;string s1("hello world");vector<int> v3(s1.begin(), s1.end());for (auto e : v3){cout << e << " ";}cout << endl;}void test_vector4(){vector<string> v1;v1.push_back("1111111111111111111111");v1.push_back("1111111111111111111111");v1.push_back("1111111111111111111111");v1.push_back("1111111111111111111111");v1.push_back("1111111111111111111111");for (string e : v1){cout << e << " ";}}
}

关键字:动态网页是什么_什么推广方法是有效果的_百度浏览器广告怎么投放_购物网站网页设计

版权声明:

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

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

责任编辑: