将元素添加到c++;:为什么push.back有效而[]无效 几年前,我在大学里开设了一门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; } #包括 #包括 #包括 #包括 int main() { std::向量test1; std::向量测试2(2); //如预期的那样完美地工作: test2[0]=1; test2[1]=2; //这将产生一个错误 //test1[0]=1; //相反,我必须写作 测试1.推回(1); 返回0; }

将元素添加到c++;:为什么push.back有效而[]无效 几年前,我在大学里开设了一门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; } #包括 #包括 #包括 #包括 int main() { std::向量test1; std::向量测试2(2); //如预期的那样完美地工作: test2[0]=1; test2[1]=2; //这将产生一个错误 //test1[0]=1; //相反,我必须写作 测试1.推回(1); 返回0; },c++,vector,C++,Vector,如果我对test1使用默认初始化,为什么我必须使用puch_呢?使用[]操作符并自动插入元素不是更“聪明”吗?为什么在C++中禁止这个? :ST::vector < 运算符[]/COD>被设计为具有与普通数组相同的语义。也就是说,它允许您访问具有特定索引的现有元素。空向量没有现有元素,因此必须将它们添加到中向后推是一种方法。它的作用是在向量的后面追加一个新元素,使其元素数增加1。感谢您的快速回答。我只是想知道,这样做的原因是什么?例如,在R中,您可以定义一个空向量并用[]初始化它。当然,它不是

如果我对test1使用默认初始化,为什么我必须使用puch_呢?使用[]操作符并自动插入元素不是更“聪明”吗?为什么在C++中禁止这个?

<代码>:ST::vector < <代码> <代码>运算符[]/COD>被设计为具有与普通数组相同的语义。也就是说,它允许您访问具有特定索引的现有元素。空向量没有现有元素,因此必须将它们添加到中<代码>向后推是一种方法。它的作用是在向量的后面追加一个新元素,使其元素数增加1。

感谢您的快速回答。我只是想知道,这样做的原因是什么?例如,在R中,您可以定义一个空向量并用[]初始化它。当然,它不是一种合适的编程语言,这就是为什么我想了解什么可以去wrong@user8我延长了我的回答。基本上,向量的
[]
运算符与普通数组具有相同的语义。这些语义是“让我访问位置n处的元素”。这来自C语言,它只是一个设计决策。元素访问需要一些语法,并且选择了
[]
(可能取自以前的语言,但我不是一个足够的历史学家知道这一点。)它不是“更聪明的”。“聪明”的集装箱船总会回来咬你,你会花很多时间和它们战斗。不同的容器类做不同的事情。如果你想按照你的建议去做,但要为性能的提升做好准备,那么就使用std::map。
push.back
push\u back
puch\u back
——拉迪达,谁在乎呢?