vector以及相关操作

package c;
/*Vector向量的操作:向量是java.util包提供的工具类,像数组一样实现了顺序存储结构,但与
 * 数组不同的是,它用来存储对象的有序集合,Vector封装了很多方法,很方便的可以扩充容量;
 *  
 *                   Vector与数组的不同之处
 * 不同之处                                  Vector              数组
 * 存储数据类型                        参考类型                                      参考类型,简单类型
 * 容量是否可以增加                 可以                                               不可以
 * 数据类型的一致性                不同类的对象可以存储到一个类中              相同类型的数据存储在同一个数组中
 * 是否合适频繁插入删除           是                                                                            否
 *
 * Vector的四种构造方法:
 * (1)public Vector(int initialCapacity ,int CapacityIncreament)
 * (2)public Vector(int initialCapacity)
 * (3)public Vector();//既设置初始容量,也不设置增量
 * (4)public Vector(Collegian c);构造一个包含制定集合元素的向量
 *
 * 常用方法:
 * public int capacity():返回向量的容量
 * public int size():返回向量中元素的个数
 * public boolean contains(Object elem):如果指定对象是向量中的元素,则返回true
 * public int indeOf(Object elem):从起始位置匹配指定的对象,然后将索引值返回,如果没找到则返回-1
 * public int indexOf(Object obj,int index):从制定的Index位置开始向后搜索,制定对象不存在,则返回-1;
 * public E elementAt(int index):返回index制定位置的元素,E代表任何一种数据类型,如果Index无效,则抛出异常
 * public void setElementAt(E obj,int index):以制定元素obj代替制定位置index处的元素
 * public void removeElement(Object obj):删除制定位置的元素
 * public boolean removeElement(Object obj):删除第一个与制定对象obj相同的元素,后面的元素向前移动
 * public void addElement(E obj):添加制定对象作为向量的最后元素
 * public void insertElementAt(E obj,index):在制定位置上插入指定元素obj
 */



/*import java.util.*;
class xx{
    int x=1;
}
class yy{
    int y=2;
}
public class vectorOper{
    public static void main(String args[]){
        Vector v1=new Vector();
        System.out.println(v1.capacity()+","+v1.size());
        for(int i=0;i<=10;i++)
        {
            v1.addElement(new xx());
        }
        System.out.println(v1.capacity()+","+v1.size());
        v1.insertElementAt(new xx(),0);
        v1.addElement(new yy());
        System.out.println(v1.capacity()+","+v1.size());
    }
}
/*10,0
20,11
20,13
*/


//向量的添加和删除操作
import java.util.*;
public class vectorOper{
    public static void main(String args[]){
        int i;
        Vector v1=new Vector(100);
        for(i=0;i<=5;i++)
        {
            v1.addElement(new Integer(1));
            v1.addElement(new Integer(2));
        }
        System.out.println(v1.capacity()+","+v1.size());
    i=0;
        while((i=v1.indexOf(new Integer(2),i))!=-1)
        {
            System.out.println(" "+i);
            i++;
        }
        while(v1.removeElement(new Integer(1)));
        System.out.println();
        System.out.println(v1.capacity()+","+v1.size());
        i=0;
        while((i=v1.indexOf(new Integer(2),i))!=-1)
        {
            System.out.print(" "+i);
            i++;
        }
    }
}

<think>好的,用户想了解C++中vector的常用操作总结。我需要根据提供的引用内容来整理这些操作,并确保回答结构清晰,符合用户的要求。首先,要确认用户可能需要的操作类型,比如初始化、基本操作、遍历方法、二维数组处理以及相关算法应用。 首先,查看引用内容。引用[1]提到了二维数组的初始化和基础操作,引用[2]和引用[3]讨论了遍历和内置函数,引用[4]和引用[5]涉及二维向量和迭代器及算法。用户的问题是关于vector的常用操作,所以需要把这些信息整合起来。 接下来,应该分点整理。初始化部分包括一维、二维的初始化方式,比如直接声明、指定大小和初始值,或者复制另一个vector。基本操作可能包括添加元素、删除元素、访问元素、调整大小等。遍历方法方面,用户可能对普通循环和迭代器遍历感兴趣,特别是引用[2]中的例子,可以用来说明这两种方法。二维数组的处理需要详细说明如何初始化和访问元素,引用[1]和引用[4]提供了例子,比如使用vector<vector<int>>。此外,引用[5]提到的排序和翻转操作,这些算法应用也是常用的一部分。 需要注意用户提到的引用中的具体例子,例如二维数组初始化时要注意空格,这在引用[4]中提到。还有迭代器的正向和反向使用,如引用[5]中的a.begin()和a.rbegin()。同时,排序函数sort和reverse的使用方法需要说明,可能包括自定义比较函数,如引用[5]中的例子。 用户可能还需要一些实际代码示例,比如如何添加元素(push_back)、删除元素(pop_back, erase),访问元素使用[]或at()。调整大小resize和容量的reserve、shrink_to_fit也是常用操作,需要提到。另外,清空vector的clear方法,以及获取大小和容量的size、capacity、empty方法。 还要考虑用户可能遇到的问题,比如迭代器失效的情况,或者二维数组遍历时的效率问题。不过用户的问题主要是总结常用操作,所以可能不需要深入这些细节,但可以提到一些注意事项,比如使用迭代器时的有效性。 最后,生成相关问题,需要围绕vector操作展开,比如初始化方式、遍历方法、二维数组处理、算法应用等。确保问题能够引导用户进一步学习相关知识点。 总结起来,回答的结构应该包括初始化、基本操作、遍历方法、二维数组处理和相关算法应用,每个部分结合引用内容给出具体例子,并确保代码格式正确,使用$...$和$$...$$标注数学公式(虽然在这个问题中可能用不到数学公式,但需要检查是否有变量需要处理)。最后生成相关问题,帮助用户深入学习。</think>以下是C++中`vector`常用操作的总结,结合代码示例和关键特性说明: --- ### 一、vector初始化 1. **一维vector** ```cpp vector<int> vec1; // 空vector vector<int> vec2(5); // 包含5个默认初始化的元素(int默认为0vector<int> vec3(5, 10); // 包含5个值为10的元素 vector<int> vec4 = {1, 2, 3}; // 列表初始化(C++11+) vector<int> vec5(vec4); // 复制vec4的内容 ``` 2. **二维vector** ```cpp vector<vector<int>> matrix1; // 空二维vector vector<vector<int>> matrix2(3, vector<int>(4)); // 3行4列,元素初始化为0[^1] vector<vector<int>> matrix3(2, vector<int>(3, 5)); // 2行3列,元素初始化为5 ``` --- ### 二、基本操作 1. **添加元素** ```cpp vec.push_back(10); // 末尾添加元素 vec.insert(vec.begin() + 2, 20); // 在索引2处插入20 ``` 2. **删除元素** ```cpp vec.pop_back(); // 删除末尾元素 vec.erase(vec.begin() + 1); // 删除索引1处的元素 vec.clear(); // 清空所有元素 ``` 3. **访问元素** ```cpp int x = vec[0]; // 通过下标访问(不检查越界) int y = vec.at(1); // 通过at方法访问(越界抛出异常) int first = vec.front(); // 首元素 int last = vec.back(); // 末尾元素 ``` 4. **容量与大小** ```cpp int size = vec.size(); // 当前元素数量 bool isEmpty = vec.empty(); // 判断是否为空 vec.resize(10); // 调整大小为10,新增元素默认初始化 vec.reserve(100); // 预分配容量(避免多次扩容) vec.shrink_to_fit(); // 释放未使用的容量(C++11+) ``` --- ### 三、遍历方法 1. **普通循环** ```cpp for (int i = 0; i < vec.size(); i++) { cout << vec[i] << " "; } ``` 2. **迭代器遍历** ```cpp for (auto it = vec.begin(); it != vec.end(); it++) { cout << *it << " "; } ``` 3. **范围for循环(C++11+)** ```cpp for (int num : vec) { cout << num << " "; } ``` --- ### 四、二维vector操作 ```cpp vector<vector<int>> matrix(3, vector<int>(4, 1)); // 3行4列,元素为1[^4] matrix[0][1] = 5; // 修改第一行第二列元素 // 遍历二维vector for (auto &row : matrix) { for (int num : row) { cout << num << " "; } cout << endl; } ``` --- ### 五、算法与高级操作 1. **排序与翻转** ```cpp sort(vec.begin(), vec.end()); // 默认升序 sort(vec.rbegin(), vec.rend()); // 降序 reverse(vec.begin(), vec.end()); // 翻转元素顺序[^5] ``` 2. **自定义排序** ```cpp sort(vec.begin(), vec.end(), greater<int>()); // 使用内置降序函数 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值