我看到了this question,并注意到一条评论说:
我不是在问将和[]
索引到一个超出范围的元素,这显然会超出范围。据我所知,这不是OP所做的。 (我可能完全错了。)我还没有听说过std::vector
超出范围的任何其他情况。
有人告诉我,使用.push_back(/*data*/)
可以防止 vector 超出范围。由于评论者的很高声誉,我几乎不加评论认为评论来自深厚的知识。该问题中的OP使用.push_back()
,再次,我认为这是std::vector
成员函数,可以防止超出范围。
在这方面,我是否应该学习有关std::vector
的重要知识,这比我在C++中更熟练的人可以解释吗?
最佳答案
不,他们没有那么 protected 。 C++使正确变得容易:
std::vector<int> v;
for (int i : v) // cannot go out of bounds
但总的来说,它不能总是先证明您是正确的:
std::vector<int> v = something();
int i = v[v[0]]; // How would the compiler know if it's legal?
为了使此安全与
v
的内容无关,您可以编写int i = v.at(v.at(0)); // might throw at runtime
但这要慢一些,因为要进行额外的运行时检查。
关于c++ - 媒介不 protected 越界吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37852934/