vector类型介绍

vector类型介绍

源码分析

#include <iostream>
#include <vector>
using namespace std;
//vector类型介绍
//1、vector类型简介
//2、定义和初始化vector对象
//3、vector对象上的操作
//  (3.1)for循环的进一步理解
int main()
{
    //1、vector类型简介:标准库:集合或者是动态数组。可以把若干对象放里边
    //vector能把其他对象放进来,所以也称为一种容器
    vector<int> vjihe; //表示这个vjihe里边保存的是int型数据(int型对象)
    //<int>模板概念
    //vector残疾的类类型
    //容器套容器
    vector<vector<int> > intchuan;
    //引用是别名不是对象,不能作为模板参数
//    二、定义和初始化vector对象
//    (1)、空vector
    vector<string> vmystr;
    vmystr.push_back("ab");
//    (2)、元素拷贝的初始化方式
    vector<string> vmystr2(vmystr);

//    (3)、C++11列表初始化
    vector<string> mystr4{"aaa","bbb"};
    for(auto& ss:mystr4){
        cout << ss << endl;
    }
//(4)、创建指定数量的元素,有元素数量概念的东西,一般会用圆括号;
    vector<int> ijihe(15,-200);
    vector<string> sjihe(5,"hello");

    vector<int> ijihe2(20);//元素会初始化为0

//    (5)、多种初始化方式,()一般代表数量相关,{}元素内容,但不绝对
    vector<int> i1(10);
    vector<int> i2{10};

    vector<string> s1{10}; //会根据类型匹配,这里的10只能代表元素数量
    vector<string> s2{10,"hello"}; //会根据类型匹配,这里的10只能代表元素数量
// 想要正确用{}进行初始化,<>模板参数必须与{}里的类型一致
    cout << s2.size() << endl;

//    三、vector对象操作,不知道vector里有多少个元素,需要动态增加、减少
//    所以,一般先创建空vector
//    vector有很多类似string的操作
    vector<int> ivec;
    if(ivec.empty()){
        cout << "ivec is empty" << endl;
    }
    //push_back
    ivec.push_back(1);
    for(auto& aa:{1,2,3,4,5,6,7,8,9,10}){
        ivec.push_back(aa);
    }
    //返回元素个数size
    cout << ivec.size() << endl;
    //clear
//    ivec.clear();
//    cout << ivec.size() << endl; //0

    //[n]访问第n个元素,n<size
    cout << ivec[1] << endl;
    cout << ivec[10] << endl;
//    cout << ivec[200] << endl; //没有显示错误
//    赋值(=、()、 = {})


//    for的应用
    vector<int> vecvalue{1,2,3,4,5};
    for(auto& vv:vecvalue){   //加&减少赋值拷贝操作
        vv *= 2;
    }
    for(auto& vv:vecvalue){
//        中间不要有其他增加删除等操作
//        vecvalue.push_back(77);
        cout << vv << endl;
    }
    return 0;
}

<think>首先,用户问的是"Vector是什么类型",并提供了三个引用。我需要基于这些引用来回答。 引用内容: - [^1]: C++中vector类型介绍和使用,提到vector是C++ STL的顺序容器,底层是动态数组,支持动态增长、随机访问等。 - [^2]: 2-8 vector类型介绍,解释了vector是容器,可以存储不同类型的对象,并展示了代码示例。 - [^3]: vector类型介绍,说明了如何创建指定数量和初始值的vector。 用户的问题是关于Vector类型介绍。根据引用,Vector在C++中是一个类模板,用于创建动态数组。 关键点: - Vector是C++标准模板库(STL)中的一部分。 - 它是一个顺序容器,底层实现是动态数组。 - 提供动态大小调整、随机访问、高效尾部插入等特性。 - 可以存储各种类型数据,包括基本类型、自定义结构等。 我需要结构化回答: 1. 定义Vector:解释什么是Vector。 2. 基本特性:如动态增长、随机访问。 3. 使用方式:如何包含头文件、声明Vector。 4. 示例:从引用中提取代码片段来展示。 回答必须使用中文。 - 数学表达式:用户提到行内数学用$...$,独立公式用$$...$$。但这个问题似乎没有数学公式,所以可能不需要。 - 系统指令说所有行内数学表达式必须用$...$,但这里没有数学内容,所以我可以忽略。 - 引用的段落末尾加引用标识,如[^1]。 - 生成相关问题。 回顾系统指令: - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] - 生成相关问题,用§§相关问题§§分隔。 用户最后说:"我想了解Vector是什么类型 请问Vector类型介绍",所以焦点是类型介绍。 结构化回答: 1. 引言:Vector是C++中的一个类模板,用于实现动态数组。 2. 特性:基于引用和,描述动态增长、随机访问等。 3. 语法:如何声明和使用Vector,从引用和中提取。 4. 示例:展示简单的代码。 5. 结尾:总结。 然后生成相关问题。 确保语言清晰、逐步解释。 最终,添加相关问题。 </think> ### Vector类型介绍 在C++中,**vector** 是一种非常重要的容器类型,属于C++标准模板库(STL)的顺序容器之一。它本质上是一个**类模板**,用于创建和管理动态数组,能存储不同类型数据元素,并提供了高效的动态内存管理。以下是Vector类型的详细介绍: 1. **基本定义与特性**: - Vector的底层实现是一个**动态数组**,这意味着它可以根据需要自动调整大小(动态增长),无需手动管理内存。 - 支持**随机访问**:通过索引(如 `v[i]`)快速访问任何元素,时间复杂度为 $O(1)$。 - **高效尾部操作**:在末尾插入或删除元素(`push_back()` 和 `pop_back()`)非常高效,平均时间复杂度为 $O(1)$;但在中间或开头插入/删除元素可能导致数据移动,时间复杂度为 $O(n)$。 - 可以存储各种数据类型,包括基本类型(如 `int`, `string`)、自定义结构(如 `struct student`),甚至其他容器(如二维数组)[^2]。 2. **声明与初始化**: - 使用Vector前,必须包含头文件:`#include <vector>`。 - 声明语法:`std::vector<元素类型> 容器名;` - 例如:`std::vector<int> numbers;` 创建一个空整型数组。 - 可以指定初始大小和值:`std::vector<int> ijihe(15, -200);` 创建15个元素,每个初始化为-200。 - 如果不指定初始值,元素会使用默认值(如 `int` 默认为0,`string` 默认为空字符串)。 3. **代码示例**: ```cpp #include <vector> #include <iostream> using namespace std; int main() { // 创建一个整型vector,并初始化5个元素为10 vector<int> numbers(5, 10); numbers.push_back(20); // 在末尾添加元素20 cout << "第一个元素: " << numbers[0] << endl; // 输出: 10 // 存储自定义结构 struct student { int num; }; vector<student> vstudlist; vstudlist.push_back(student{101}); // 添加学生对象 // 二维vector示例 vector<vector<string>> strchuan = {{"a", "b"}, {"c", "d"}}; return 0; } ``` 此代码展示了Vector的声明、初始化和基本操作,包括添加元素和访问数据[^3]。 4. **重要注意事项**: - Vector**不能存储引用类型**(如 `vector<int&>` 无效),因为引用是别名而非独立对象[^2]。 - 作为类模板,Vector通过模板参数实例化(如 `<int>`),使其类型安全且灵活。 - 内存管理:Vector在堆上分配内存,当元素数量超过当前容量时,会自动重新分配更大的内存块(通常加倍),这可能引起性能开销,但可通过 `reserve()` 预分配优化。 Vector是C++中处理动态数组的首选工具,广泛应用于数据集合管理、算法实现(如排序和搜索)等领域[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值