vector 使用

这篇具有很好参考价值的文章主要介绍了vector 使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

c++标准库的使用:

1.vector的使用:

1.1 vector向量容器:

​ 底层数据结构:动态开辟的数组,每次以原来空间大小的2倍扩容。

​ 容器中,对象的构造析构,内存的开辟释放,通过容器的空间配置器allocator来实现的

​ allocator类实现了内存分配与对象构造的分离,定义在头文件中分配的内存是原始的,未构造的

allocator<T>a:定义名为a的allocator对象,为类型T的对象分配内存

allocate(n):分配一段原始的,未构造的内存,保存n个T类型对象,返回类型是T的指针:T* p

deallocate(p,n):释放T*指针p中地址开始的n个内存,需要先调用destory函数析构对象

construct(p,args):p是T*类型的指针,指向原始内存,args传递给类型T的构造函数,来在p指向的内存中构造一个对象

destroy(p):对p指向的对象执行析构函数。
1.2 增加:

​ vec.push_back():末尾添加一个元素,复杂度O(1),可能导致容器扩容

​ vec.insert(it,20):it迭代器指向位置添加一个元素,复杂度O(n),可能导致容器扩容

1.3 删除:

​ vec.pop_back():末尾删除元素,O(1)

​ vec.erase(it):删除迭代器it指向的元素

1.4 查询:

​ operator[]:下标的随机访问运算符vec[5],复杂度O(1)

​ iter迭代器遍历

​ find,for_each,foreach:通过迭代器实现

1.5 常用方法:

​ size(),empty()

​ reserve(20):vector预留空间:只给容器底层开辟指定大小的内存空间,并不添加新元素

​ resize(20):容器扩容,不仅给容器底层开辟指定大小的内存空间,还会添加新的元素

​ swap:两个容器进行元素交换

1.6 注意:

​ 对容器进行连续插入或删除操作(insert/erase)一定要更新迭代器(通过insert/erase函数的返回值更新迭代器),

​ 否则第一次insert/erase完成,迭代器就失效了。文章来源地址https://www.toymoban.com/news/detail-498254.html

1.7 实例程序:
#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char** argv){
    vector<int>vec;
    for(int i = 0; i < 20; ++i){
        vec.push_back(rand()%100 + 1);
    }
  // 将vec中的偶数删除。
    auto it = vec.begin();
    while(it != vec.end()){
        if(*it % 2 == 0){
            it = vec.erase(it); // 使用vec.erase的返回值更新it,防止it失效。
        }
        else{
            it++;
        }
    }
  
  // 将偶数前添加一个数,数的值是:偶数-1
  	auto it1 = vec.begin();
    for(;it1 != vec.end();it1++){
        if(*it1 % 2 == 1){
            it1 = vec.insert(it1,*it1-1);
            it1++;
        }
    }
  
    for(auto iv : vec){
        cout << iv << " ";
    }
    cout << endl;

    cout << "size = " << vec.size() << endl;
    return 0;
}

探索reserv()函数和resize()函数:
vector<int>vec;
vec.reserve(20);
cout << "size = " << vec.size() << endl;
cout << "empty(): " << vec.empty() << endl;

for(int i = 0; i < 20; ++i){
  vec.push_back(rand()%100 + 1);
}
cout << "size = " << vec.size() << endl;
cout << "empty(): " << vec.empty() << endl;
/*
	size = 0
  empty(): 1
  size = 20
  empty(): 0
*/

vector<int>vec;
vec.resize(20);
cout << "size = " << vec.size() << endl;
cout << "empty(): " << vec.empty() << endl;

for(int i = 0; i < 20; ++i){
  vec.push_back(rand()%100 + 1);
}
cout << "size = " << vec.size() << endl;
cout << "empty(): " << vec.empty() << endl;
/*
	size = 20
  empty(): 0
  size = 40
  empty(): 0
*/

到了这里,关于vector 使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity --- 三维数学 --- Vector类 --- 向量部分

       1.注意每一个数字都表示一段有向位移 --- 有方向的距离 1.从尾到头那一段称为向量的模长 --- magnitude (direction对应的是向量的方向) 2.一个向量有大小 -- 模长(magnitude) , 有方向(direction) 1.向量的模长等于各分量的平方和的平方根 2.由于在计算机中计算平方和要比计算平方

    2024年02月12日
    浏览(34)
  • C++学习笔记之四(标准库、标准模板库、vector类)

    C + + C++ C + + 标准库指的是标准程序库( S t a n d a r d Standard St an d a r d L i b a r a y Libaray L iba r a y ),它定义了十个大类,其中包括我们比较熟悉的 i o s t r e a m , s t r i n g iostream, string i os t re am , s t r in g 都是这十个大类的其中一个类中的一个小类。而 c + + c++ c + + 的标准模板库也

    2024年02月07日
    浏览(39)
  • C++面试:向量vector和列表list介绍

    目录 vector list  list和vector的区别 1. 底层实现: 2. 动态性和静态性: 3. 内存管理: 4. 迭代器和指针: 5. 访问效率: 6. 适用场景:   std::vector 是 C++ STL 提供的动态数组容器,提供了多种操作。以下是一些常见的 std::vector 操作,一一列举出来 初始化和基本操作 插入和删除元

    2024年01月22日
    浏览(34)
  • 支持向量机(Support Vector Machine,SVM)

            支持向量机是一种基于统计学习理论的模式识别方法。SVM的目的是为了找到一个超平面,使得它能够尽可能多的将两类数据点正确的分开,同时使分开的两类数据点距离分类面最远。为了达到该目的,通常构造一个在约束条件下的优化问题,通过求解该问题,从而得

    2024年02月16日
    浏览(46)
  • 16 标准模板库STL之vector

    基础知识         1、vector和数组有点类似,但它比数组更好用。一般来说,数组的长度是不能动态拓展的,因此就需要考虑长度到底多大合适。长度不能过大,否则浪费内存;也不能过小,否则内存不够。vector正好弥补了这个缺陷,相当于一个可以自动改变数组长度的动

    2023年04月17日
    浏览(52)
  • 张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix)

    张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix) Python Numpy 切片和索引(高级索引、布尔索引、花式索引) Python NumPy 广播(Broadcast) 张量(Tensor) :Tensor = multi-dimensional array of numbers 张量是一个多维数组,它是标量,向量,矩阵的高维扩展 ,是一个数据容器,张

    2024年02月03日
    浏览(39)
  • 【学习笔记】unity脚本学习(三)(向量 Vector3)

    新的一周,开启新的学习,加油 视频讲得笼统了,还是去复习下高中知识吧 高中向量基础 高中数学平面向量 【数学】向量的四则运算、点积、叉积、正交基 叉乘公式 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读 两个向量的叉乘,又叫向量积、外积、叉积

    2024年02月06日
    浏览(41)
  • 在R中将列表(list)转换为向量(vector)

    问题:将列表中的所有元素“展平”,赋值给一个向量 解决方案:使用unlist()函数; 在许多情况下需要向量,例如,baseR中的许多统计函数需要一个向量作为输入,例如,如果iq.score是一个包含数值的列表,那么我们不可以直接计算它的平均值。因为mean()函数接受一个向量作

    2024年02月13日
    浏览(41)
  • ElasticSearch dense_vector向量查询-Java实现

    本文介绍如何使用ElasticSearch的Java High Level API执行向量查询,向量类型为dense_vector。 在这个案例中,我们首先创建了一个RestHighLevelClient对象,并定义了索引名称和类型名称。 为了限制返回的文档数量, 我们设置了minScore,from,size变量。 然后,定义查询的向量,创建查询脚

    2024年02月08日
    浏览(31)
  • 线性代数 --- 向量空间(vector space)与子空间(subspace)

            向量空间就是由包含n个分量的列向量所组成的Rn的空间,其中R表示实数。例如,R2就代表了一般的x-y平面,其中包含两个分量的向量表示坐标系中的一个点(x,y)。同理,R3中的一个向量,包含三个分量,可以表示三维坐标系中的一个点(x,y,z)。 也就是说,向量空间,

    2024年02月05日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包