在 C++ 中将元素添加到空向量:为什么 push.back 有效而 [] 无效
add an element to an empty vector in c++: why push.back works and [] not
几年前,我在大学里上了一门 c++ 入门课程。但是,我主要使用函数式语言,如R或Matlab。现在我又开始学习c++。我正在阅读有关向量的信息,并在以下内容中运行:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> test1;
std::vector<int> test2(2);
// works perfectly as expected:
test2[0] = 1;
test2[1] = 2;
// this would give an error
//test1[0] = 1;
//instead I have to write
test1.push_back(1);
return 0;
}
如果我对 test1 使用默认初始化,为什么我必须使用 puch_back?使用 [] 运算符并自动插入元素不是"更聪明"吗?为什么这在 C++ 中是被禁止的?
std::vector
的operator[]
被设计为具有与普通数组相同的语义。也就是说,它使您可以访问具有特定索引的现有元素。空向量没有现有元素,因此您必须添加它们。 push_back
是做到这一点的一种方式。它具有将新元素附加到向量背面的效果,将其元素数增加 1。
相关文章:
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- 如何像在javascript中一样"push" c ++映射
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- 列表大小为 1,但 front() 和 back() 不相等
- 返回C++中没有 back() 方法的容器的最后一个元素?
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 模板堆栈类的复制构造函数中的 pop() 和 push() 不起作用
- 我们可以使用Back() - 值索引在其上执行向量插入
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- push(ing)back在循环中对象指针
- 在 C++ 中将元素添加到空向量:为什么 push.back 有效而 [] 无效
- 我似乎无法让 v.push.back() 处理字符串
- String::push_back() does not push back
- 向量resize(), push.back(), reserve()方法