vector使用过程中的一些坑(持续更)

简介: vector使用过程中的一些坑(持续更)

vector使用过程中的一些坑(持续更)

1.vector为空时不能通过下标标赋值,如:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v;
    v[0] = 1;
    return 0;
}

v初始为空所以出错

但只要初始vector有容量通过下标赋值就可以:

#include<bits/stdc++.h>
using namespace std;
int main()
{
  vector<int>a(1);
  a[2]=1;
  cout<<a[2];
}

就能成!

2.vector通过数组下标访问时注意vector为空时不能通过下标标赋值,如:

#include<bits/stdc++.h>
using namespace std;
int main()
{
  vector<int>a;
  a[2]=1;
  cout<<a[2];
}

v初始为空所以出错

但只要初始vector有容量通过下标赋值就可以:

#include<bits/stdc++.h>
using namespace std;
int main()
{
  vector<int>a(1);
  a[2]=1;
  cout<<a[2];
}

3.vector通过数组下标访问时注意这个元素是存在的,不然会出现运行内存错误,如:

#include<bits/stdc++.h>
using namespace std;
int main()
{
  vector<int>a(10);
  a[2]=1;
  a[10]=1;
  cout<<a[10];
}

a[10]是越界的,这段代码访问了vector末尾以后的元素,这将可能导致很危险的结果,但系统不会报错。

建议使用at函数访问如:

vector<int> v(10,0);
cout<<v.at(11)<<endl;

以下的代码将更加安全,取代试图访问内存里非法值的作法,at() 函数能够辨别出访问是否越界并在越界的时候中止程序。

4.创建类似二维数组的vector:

vector<int> v[N];

它创建了一个由第1个类型的N个vector组成的静态数组。

v[0]现在是一个和v[1]完全不同的vector。注意,v[0]是vector而不是vector中的元素。如果我们想向第1个vector push一个值,可以通过 v[0].push_back(val)。为了访问那个元素我们可以通过 v[0][0]来访问(类似2维矩阵)。

例:

vector <int> v2[n]; 
    v2[0].push_back(1); 
    v2[0].push_back(20); 
    cout << '\n'; 
    for(int i = 0; i < v2[0].size(); i++ ) 
       cout << v2[0][i] << " ";

**5.**vector容器可以通过还可以通过以下2种构造函数初始化:

vector<int> v(v2);
vector<int> v = v2;

v从v2 复制数据。

目录
相关文章
|
21天前
|
存储 C++ 容器
【C++】vector的底层剖析以及模拟实现
【C++】vector的底层剖析以及模拟实现
|
8月前
|
C++
【C++】vector的简化模拟实现
【C++】vector的简化模拟实现
|
21天前
|
算法 中间件 测试技术
思考力:如何更好地做出判断
思考力:如何更好地做出判断
|
21天前
|
人工智能 运维 监控
运维工程师要如何才能适应IT技术持续迭代更新
随着互联网的快速发展以及云计算、AI、物联网等行业的快速发展,传统的运维已经无法适应时代的要求,运维工作快速向标准化运维、自动化运维、敏捷运维、智能运维等阶段进步。
71 0
|
7月前
|
C++ 容器
93 C++ - STL综合案例
93 C++ - STL综合案例
33 0
|
8月前
思维模型No.32|如何真正改变行为?需要5种不同的干预策略
思维模型No.32|如何真正改变行为?需要5种不同的干预策略
64 0
|
算法 区块链 C++
【C++要笑着学】vector 核心框架接口的模拟实现 | 基于STL3.0版本的简化vector | 浅谈迭代器失效问题(二)
STL 的源代码整体考虑的东西比较多,还要考虑和其他地方的结合,因此整体的设计是比较复杂的。基于这一系列原因,我们会以简单的形式去实现其核心框架接口,方便去学习 vector。
91 1
【C++要笑着学】vector 核心框架接口的模拟实现 | 基于STL3.0版本的简化vector | 浅谈迭代器失效问题(二)
|
存储 测试技术 区块链
【C++要笑着学】vector 核心框架接口的模拟实现 | 基于STL3.0版本的简化vector | 浅谈迭代器失效问题(一)
STL 的源代码整体考虑的东西比较多,还要考虑和其他地方的结合,因此整体的设计是比较复杂的。基于这一系列原因,我们会以简单的形式去实现其核心框架接口,方便去学习 vector。
73 1
【C++要笑着学】vector 核心框架接口的模拟实现 | 基于STL3.0版本的简化vector | 浅谈迭代器失效问题(一)
|
测试技术
【类型挑战】Push,难度⭐️
【类型挑战】Push,难度⭐️
112 0
【类型挑战】Push,难度⭐️
|
Java 索引
ArrayList哪种循环效率更好你真的清楚吗
ArrayList哪种循环效率更好你真的清楚吗
158 0

热门文章

最新文章