对在 C++ 中使用 vector 有疑问。它与 vector 中的 push_back 方法有关。
对于第一个程序,我使用 push_back 将元素插入 vector 中。
对于第二个程序,我使用 at() 将元素插入 vector 中。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main ()
{
std::vector<string> myvector (3);
cout << "In main" << endl;
for (unsigned i=0; i<myvector.size(); i++)
{
myvector.push_back("hi"); //Note: using push_back here.
}
cout << "elements inserted into myvector" << endl;
std::cout << "myvector contains:" << endl;
for (auto v: myvector)
cout << v << endl;
// access 2nd element
cout << "second element is " << myvector[1] << endl;
return 0;
}
Output:
Hangs after entering main.
$ ./a.out
In main
而如果我使用 myvector.at() 插入如下元素,则很好。#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main ()
{
std::vector<string> myvector (3);
cout << "In main" << endl;
for (unsigned i=0; i<myvector.size(); i++)
{
myvector.at(i) = "hi"; // using 'at' instead of 'push_back'
}
cout << "elements inserted into myvector" << endl;
std::cout << "myvector contains:" << endl;
for (auto v: myvector)
cout << v << endl;
// access 2nd element
cout << "second element is " << myvector[1] << endl;
return 0;
}
Output:
./a.out
In main
elements inserted into myvector
myvector contains:
hi
hi
hi
second element is hi
$
我使用 push_back 的方式有什么问题?这是我们在 vector 中插入元素的方法之一,对吧。
最佳答案
此循环中的问题:
for (unsigned i=0; i<myvector.size(); i++)
{
myvector.push_back("hi"); //Note: using push_back here.
}
是如果你曾经进入循环,即myvector
最初不是空的,然后每个 push_back
将增加 vector 的大小。由于i
在循环中每次递增一次,它永远不会 catch vector 的大小,并且最终会出现无限循环。.at()
没有这个问题,因为它只索引到 vector 中,而不会改变它的大小。只要参数 at
是一个有效的索引,你可以毫无问题地访问这个位置。
关于c++ - 在 C++ 中的 vector 中使用 push_back vs at,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64715254/