这段代码使用msvc(出界错误)失败,但似乎与gcc和clang一起工作正常.什么是正确的行为?
#include <iostream>
#include <vector>
int main() {
std::vector<int> v;
v.reserve(10);
for (int i = 0; i < 10; ++i)
{
v[i] = i * 2;
}
for (int i = 0; i < 10; ++i)
{
std::cout << v[i] << " ";
}
std::cout << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
行为未定义.reserve仅保留内存,但不影响容器的大小.也许你想用resize?
std::vector<int> v;
v.resize(10);
for (int i = 0; i < 10; ++i)
{
v[i] = i * 2;
}
Run Code Online (Sandbox Code Playgroud)
虽然在这种情况下你可以写
std::vector<int> v(10);
for (int i = 0; i < 10; ++i)
{
v[i] = i * 2;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以reserve与以下一起使用push_back:
std::vector<int> v;
v.reserve(10);
for (int i = 0; i < 10; ++i)
{
v.push_back(i * 2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |