vector 详解

发现许多关于 \(vector\) 的文章没有具体化的模板,所以我来添加一个有具体模板的 \(vector\) 文章。

  • 插入元素

    \(vector\) 中的插入主要是利用 \(push\)_\(back\) 实现的。

    for (int i = 1, a; i <= n; i ++ ) cin >> a, v.push_back(a);
    
  • 删除元素

    \(vector\) 中删除元素利用 \(pop\)_\(back\) 实现

    v.pop_back();
    
  • 找到 \(vector\) 首个元素(返回指针)

    cout << *(v.begin()) << endl;
    
  • 找到 \(vector\) 末尾个元素(返回指针)

    由于 \(vector\) 不定长,因此返回值不定。

    剩余的就都是比较简单的东西了,直接贴一个代码感性理解吧~

    #include <iostream>
     #include <cstdio>
     #include <algorithm>
     #include <vector>
    
     using namespace std;
    
     vector<int> v;
     int X, L, R, n;
    
     void input()
     {
     	cin >> n;
     	for (int i = 1, a; i <= n; i ++ ) cin >> a, v.push_back(a);
     	
     	cin >> X >> L >> R;
     }
    
     void output()
     {
     	printf("当前vector中的元素是:");
     	for (int i = 0; i < v.size(); i ++ ) printf("%d ", v[i]);
     	printf("\n");
     }
    
     void work(int x, int l, int r)
     {
     	// 排序
     	sort(v.begin(), v.end());
     	output();
     	// 找到大于等于x的最小数
     	auto t = lower_bound(v.begin(), v.end(), x);
     	printf("大于等于x的最小数是%d\n", *t);
     	// 找到大于x的最小数
     	t = upper_bound(v.begin(), v.end(), x);
     	printf("大于x的最小数是%d\n", *t);
     	// 判断x是否在 vector里
     	vector<int>::iterator it;
     	it = find(v.begin(), v.end(), x);
     	if (it == v.end()) printf("没有找到\n");
     	else printf("找到了\n"); 
     	// 删除 vector中(l, r)的一段
     	v.erase(v.begin() + l, v.begin() + r + 1);
     	output();
     }
    
     int main()
     {
     	input();
     	cout << *(v.end()) << endl;
     	
     	work(X, L, R);
     	
     	return 0;
     }
    
     /*
     input:
    
     10
     1 2 3 4 5 8 9 10 100 1000
     100 2 5
    
     output:
    
     当前vector中的元素是:1 2 3 4 5 8 9 10 100 1000
     大于等于x的最小数是100
     大于x的最小数是100
     没有找到
     当前vector中的元素是:1 2 9 10 100 1000
     */
    
posted @ 2022-02-26 19:05  Link-Cut-Y  阅读(94)  评论(0)    收藏  举报