vector::push_back与vector::operator[]的区别

3
在下面的程序中,
include<iostream>
#include<vector>
using namespace std;

int main()
{
     vector<int> numbers;

    numbers.push_back(2);
    numbers.push_back(10);
    numbers.push_back(5);
    numbers.push_back(3);
    numbers.push_back(7);

    numbers[3] = 8;
    numbers[5] = 11;

    for(int i=0; i<numbers.size(); ++i)
    {
            cout<<" "<<numbers[i];
    }
}    

ideone上查看。

这里,numbers[3]是有效的,但numbers[5]不行。
看起来,vector::operator[]不像vector::push_back一样增加vector的大小。
那么,这两者之间是否唯一的区别就是这个,还是还有其他的区别呢


2
那就是区别所在。为什么你要在问题中回答自己的问题? - R. Martinho Fernandes
2个回答

14

不要将此与std::map::operator[]混淆。cppreference.com:与std::map::operator[]不同,此运算符永远不会向容器中插入新元素。通过此运算符访问不存在的元素是未定义行为 - starriet

9

push_back 在向量的末尾创建一个指定值的新元素。operator[] 需要元素存在,只是访问它。之所以 [5] 不起作用是因为你有 5 个元素,所以索引从 0 到 4。

一般来说,在添加新元素时,首选使用 push_back,其次是 resize,然后是 operator[]。但只能使用其中一个进行读取,而 operator[] 还需要维护正常的数组语法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接