我是C ++和学习数据结构的新手。在下面的代码中,我收到“超出范围警告”,并且不明白我在做什么错。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> numbers{100,-1,2,4,55,78,3};
int temp {};
int pass {};
pass = numbers.size();
for(int i {0} ;i<pass-1;i++){
for(int j {0} ; j<pass-1-i ; j++){
if(numbers.at(j) > numbers.at(j+1)){
temp = numbers.at(j);
numbers.at(j)=numbers.at(j+1);
numbers.at(j+1)=temp;
}
}
}
cout << numbers.at(0) << endl;
cout << numbers.at(1) << endl;
cout << numbers.at(2) << endl;
cout << numbers.at(3) << endl;
cout << numbers.at(4) << endl;
cout << numbers.at(5) << endl;
cout << numbers.at(6) << endl;
cout << numbers.at(7) << endl;
cout << numbers.at(8) << endl;
return 0;
}
似乎您可能不了解其std::vector
工作原理。
您仅7
在vector
其中声明了元素,这意味着您只能上到索引6
。这是因为std::vector
的索引始于0
。这也是正确的std::array
。
vector<int> numbers{100,-1,2,4,55,78,3};
但是,在您的代码中放置了以下两个语句:
cout << numbers.at(7) << endl;
cout << numbers.at(8) << endl;
这是行不通的,因为就像我提到的那样,您只能向上索引6
。
您还应该考虑使用for
类似于上述注释的循环。它使用起来更简单,工作量也更少。
例如,一个for
循环:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> numbers{ 100,-1,2,4,55,78,3 };
int temp{};
int pass{};
pass = numbers.size();
for (int i{ 0 }; i < pass - 1; i++) {
for (int j{ 0 }; j < pass - 1 - i; j++) {
if (numbers.at(j) > numbers.at(j + 1)) {
temp = numbers.at(j);
numbers.at(j) = numbers.at(j + 1);
numbers.at(j + 1) = temp;
}
}
}
std::cout << "v = { ";
for (int i = 0; i < numbers.size(); i++) {
std::cout << numbers.at(i) << ", ";
}
std::cout << "}; \n";
return 0;
}
输出:
v = { -1, 2, 3, 4, 55, 78, 100, };
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句