从 c 数组创建向量
Creating vector from c-array
试图从c数组的部分(5个元素)制作向量。
const static int size = 10;
cout << "vector from C-array: " << endl;
int ia[size] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
vector<int> vi2(ia, ia + size-5);
但是当我尝试使用整个 c 数组长度枚举向量项时,我得到所有像 vector 这样的项都会像 vector<int> vi2(ia, ia + size-5);
一样初始化。没有超出范围的异常或错误。
for(int i = 0; i < size; i++) {
cout << i << ":" << vi2[i] << " ";
}
在输出中:
0:1 1:2 2:3 3:4 4:5 5:6 6:7 7:8 8:9 9:10
为什么矢量初始化使用第二个参数来描述指向数组端的指针,如果它不使用它?
您正在越界访问向量。这是未定义的行为。不要求引发异常。
你不能超越vi2.size()-1
.
for(int i = 0; i < vi2.size(); ++i)
{
std::cout << i << ":" << vi2[i] << " ";
}
[]
运算符不执行任何边界检查(类似于 C 和 C++ 中处理原始数组的 []
运算符)。
如果要引发异常,请使用 at
成员函数:
std::vector<int> v { 1, 2, 3, 4, 5 };
int invalidInt = v.at(5); // hell breaks lose, says the runtime
C++不会像Java那样在访问越界索引时引发异常。这是未定义的行为,您根本不能这样做。
for(int i = 0; i < vi2.size(); i++) {
cout << i << ":" << vi2[i] << " ";
}
请参阅 C 和 C++ 中未定义行为指南:
在安全的编程语言中,错误在发生时被捕获。例如,Java通过其异常系统在很大程度上是安全的。在不安全的编程语言中,不会捕获错误。相反,在执行错误操作后,程序继续运行,但以一种无声错误的方式,可能会在以后产生可观察到的后果。
如果您确实希望在超出界域时抛出异常,请使用 .at()
:
for(int i = 0; i < size; i++) {
cout << i << ":" << vi2.at(i) << " ";
}
话虽如此,最好使用vi2
(vi2.size()
)的实际大小。
相关文章:
- 从具有自定义排序的向量创建集合
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 从类指针的向量创建成员变量的向量
- 从 c++ 中的字符串向量创建一个元组
- 如何在 c++ 中从两个向量创建 JSON 对象?
- 如何在不迭代的情况下从string_view向量创建字符串向量?
- 通过移动从两个向量创建元组向量
- 为结构的向量创建C 矢量迭代器
- C 矢量元素擦除与新向量创建
- 使用向量的向量创建一个尺寸
- C MultiSet从排序的向量创建
- 从向量<T>创建一组字符串
- 使用C 中的向量创建整数集类别
- 从两个原始向量创建一个“特征::矩阵”
- 用向量创建筛子
- 从Vectores的向量创建一个板
- C++内存管理:从函数中的向量创建一个新数组
- 正在使用类中的向量创建类
- 为向量创建临时变量
- 如何在c++中使用模板图类中的向量创建邻接矩阵