OVSolitario-io

导航

vector

关于使用

对于空调用:q[v].size();
其支持q[v].back(), q[v].pop_back();

常见对比:vector只能访问已有空间,若不预开空间则会非法访问

vector<int> q[N];
等价于
vector<vector<int>> q(n, vector<int>(0));

对于t组测试数据:实际上vector<vector>不会采用动态空间而是给定大小

减少扩容复制操作的时间

for(cin >> T >> id; T; -- T) {
int n, m, c, f;
cin >> n >> m >> c >> f;
vector<vector<int>> a(n, vector<int>(m));//且局部变量vector初始都为0无须清空
    
for(auto &i : a) {
    for(auto &j : i) {
        cout << j << endl;
        }
    }
}

vector构造函数
(1)参数,(2)参数(n,2)为n大小,都为2的数组

//两种方法都可以
vector<int> a(n);//构造n大小的vector
a.resize(n);
//对于遍历也可以使用cin>>a[i]直接赋值,也可以范围遍历(&x进行赋值),但范围遍历下标只能从0开始

**
构造函数构造n*m的二维vector嵌套**

即可将vector(开在局部变量)避免多组测试数据未情况问题,下标为0~n-1和0~m-1

//类型为vector套vector,外层n个vector,内层是长度为m的vector
vector<vector<int>> a(n, vector<int>(m));

对于线性空间来说,地址为连续(后=前+1),起始地址为begin,终止位置+1为end

其中不应该访问end下标(end有可能是实际vector最后一个位置的下一个位置,即未被扩展位置),所以最多访问end-1

范围遍历(上下等价)
对于范围遍历来说,不加&意味着值拷贝,而加上&后意味着对原值取引用(修改引用值反映到原值时尚)

for(auto x : a) {
        cout << x << ' ';
    }
	
//用指针从begin开始扫,一直扫到end前面元素
for(auto it = a.begin(); it != a.end(); ++ it) {
        auto i = *it;//用i取指针传的值
        cout << i << ' ';
    }

我们知道&引用修改值后:即可范围存值

vector<int> a(n);

for(auto &x : a) {
    cin >> x;
}
等价
for (int i = 0; i < n; ++i)
    cin >> nums[i];

其中的x只是取a的值,对x进行修改不会影响到a

&x:(引用)后,x的地址和a的地址相同,则可以对a进行修改,类似函数传参,只有加&符号才可以将传入函数值改变

posted on 2025-08-26 09:39  TBeauty  阅读(6)  评论(0)    收藏  举报