C++ vector

来源:互联网 发布:易语言网络爬虫 编辑:程序博客网 时间:2024/06/08 04:40

有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,但是在 C++ 和 Java 里面有已经写好的标准模板库(Standard Template Library),就是我们常说的 STL 库,实现了集合、映射表、栈、队列等数据结构和排序、查找等算法。我们可以很方便地调用标准库来减少我们的代码量。


C++ 中动态数组写作vector, Java 中写作ArrayList,C 语言中没有标准库,因此非常建议 C/C++ 组的选手使用 C++ 进行比赛,即使你之前只用过 C 也没关系,因为 C 语言的代码几乎都可以被 C++ 编译器正确理解。用 C 语言同学尽管写的是 C 代码也尽量用 C++ 的方式编译。


引用库


C++ 中vector的实现在一个<vector>头文件中,在代码开头引入这个头文件,并在引入所有头文件之后加上一句using namespace std。




#include <vector>
using namespace std;
int main() {
    return 0;
}
Java 中ArrayList在java.util.ArrayList包里面实现。通过import的方式引进库。




1
import java.util.ArrayList;
2
public class ArrayListTest {
3
    public static void main(String[] args) {
4

5
    }
6
}
构造一个动态数组


现在我们来构造一个动态数组。


C++ 中直接构造一个vector的语句为:vector<T> vec。这样我们定义了一个名为vec的储存T类型数据的动态数组。其中T是我们数组要储存的数据类型,可以是int、float、double、或者其他自定义的数据类型等等。初始的时候vec是空的。


Java 中通过 ArrayList<T> list = new ArrayList<T>() 构造一个储存T类型数据的ArrayList对象。


插入元素


C++ 中通过push_back()方法在数组最后面插入一个新的元素。




1
#include <vector>
2
using namespace std;
3
int main() {
4
    vector<int> vec;  // []
5
    vec.push_back(1); // [1]
6
    vec.push_back(2); // [1, 2]
7
    vec.push_back(3); // [1, 2, 3]
8
    return 0;
9
}
Java 中通过add()方法在数组最后面插入一个新的元素。




1
import java.util.ArrayList;
2
public class ArrayListTest {
3
    public static void main(String[] args) {
4
        ArrayList<Integer> list = new ArrayList<Integer>(); // []
5
        list.add(1); // [1]
6
        list.add(2); // [1, 2]
7
        list.add(3); // [1, 2, 3]
8
    }
9
}
获取长度并且访问元素


C++ 中通过size()方法获取vector的长度,通过[]操作直接操作访问vector中的元素,这一点和数组是一样的。




1
#include <vector>
2
#include <stdio.h>
3
using namespace std;
4
int main() {
5
    vector<int> vec;  // []
6
    vec.push_back(1); // [1]
7
    vec.push_back(2); // [1, 2]
8
    vec.push_back(3); // [1, 2, 3]
9
    for (int i = 0; i < vec.size(); ++i) {
10
        printf("%d\n", vec[i]);
11
    }
12
    return 0;
13
}
Java 中也是通过size()方法获取长度,但是需要通过get(i)的方法获取第 ii 个位置的元素。




1
import java.util.ArrayList;
2
public class ArrayListTest {
3
    public static void main(String[] args) {
4
        ArrayList<Integer> list = new ArrayList<Integer>(); // []
5
        list.add(1); // [1]
6
        list.add(2); // [1, 2]
7
        list.add(3); // [1, 2, 3]
8
        for (int i = 0; i < list.size(); ++i) {
9
            System.out.println(list.get(i));
10
        }
11
    }
12
}
修改元素


C++ 中修改vector中某个元素很简单,只需要用=给它赋值就好了,比如vec[1] = 3。




1
#include <vector>
2
#include <stdio.h>
3
using namespace std;
4
int main() {
5
    vector<int> vec;  // []
6
    vec.push_back(1); // [1]
7
    vec.push_back(2); // [1, 2]
8
    vec.push_back(3); // [1, 2, 3]
9
    vec[1] = 3; // [1, 3, 3]
10
    vec[2] = 2; // [1, 3, 2]
11
    for (int i = 0; i < vec.size(); ++i) {
12
        printf("%d\n", vec[i]);
13
    }
14
    return 0;
15
}
Java 中若要将index位置上的元素更改为b,需要让对象调用set(index, b)方法。




1
import java.util.ArrayList;
2
public class ArrayListTest {
3
    public static void main(String[] args) {
4
        ArrayList<Integer> list = new ArrayList<Integer>(); // []
5
        list.add(1); // [1]
6
        list.add(2); // [1, 2]
7
        list.add(3); // [1, 2, 3]
8
        list.set(1, 3); // [1, 3, 3]
9
        list.set(2, 2); // [1, 3, 2]
10
        for (int i = 0; i < list.size(); ++i) {
11
            System.out.println(list.get(i));
12
        }
13
    }
14
}
清空


C++ 和 Java 中都只需要调用clear()方法就可清空vector或者ArrayList。


C++ vector方法总结:


方法 功能
push_back 在末尾加入一个元素
pop_back 在末尾弹出一个元素
size 获取长度
clear 清空
Java ArrayList方法总结:


方法 功能
add 增加元素
get 获取元素
set 修改元素
size 获取长度
clear 清空
通过上面列举的方法,可以满足我们平时做题时的大多数需求。关于vector和ArrayList的更多方法,可以去参考文档,或者在网络上搜索资料查看。对于比赛来说,上面的方法已经足够了。


0 0
原创粉丝点击