C++ 为什么这会导致超出范围的异常
为什么这段代码运行时,VC++会显示一个超出范围的异常 错误消息: 矢量线:933 表达式:“标准C++库超出范围”& & 0<P> high是返回迭代器中最高元素的函数。然后我构造了一个数组和一个向量,用high找到其中最高的元素 这是迭代器。h:C++ 为什么这会导致超出范围的异常,c++,vector,outofrangeexception,C++,Vector,Outofrangeexception,为什么这段代码运行时,VC++会显示一个超出范围的异常 错误消息: 矢量线:933 表达式:“标准C++库超出范围”& & 0<P> high是返回迭代器中最高元素的函数。然后我构造了一个数组和一个向量,用high找到其中最高的元素 这是迭代器。h: template<class Iterator> Iterator high(Iterator first, Iterator last) { Iterator high = first; for(Iterator p
template<class Iterator> Iterator high(Iterator first, Iterator last)
{
Iterator high = first;
for(Iterator p = first; p != last; ++p)
if(*high < *p) high = p;
return high;
}
模板迭代器高(迭代器优先,迭代器最后)
{
迭代器高=第一;
for(迭代器p=first;p!=last;++p)
如果(*高<*p)高=p;
高回报;
}
这是主要功能:
#include <iostream>
#include <vector>
#include "iterator.h"
using namespace std;
double* get_from_jack(int* count)
{
double* p = new double[5];
p[0] = 2.3;
p[1] = 3.1;
p[2] = 2.1;
p[3] = 1.2;
p[4] = 4.3;
*count = 5;
return p;
}
vector<double>* get_from_jill()
{
vector<double> v;
v.push_back(2.1);
v.push_back(3.8);
v.push_back(5.1);
v.push_back(2.2);
v.push_back(1.9);
v.push_back(4.4);
vector<double>* p = &v;
return p;
}
void fct()
{
int jack_count = 0;
double* jack_data = get_from_jack(&jack_count);
vector<double>* jill_data = get_from_jill();
double* jack_high = high(jack_data, jack_data+jack_count);
vector<double>& v = *jill_data;
double* jill_high = high( &v[0], &v[0]+v.size() );
cout << "Jill's high " << *jill_high << "; Jack's high " << *jack_high;
delete[] jack_data;
delete jill_data;
//delete jack_high;
//delete jill_high;
}
int main()
{
try{
fct();
int n;
cin >> n;
return 0;
}
catch(exception&e)
{
cerr << e.what();
return 1;
}
catch(...)
{
return 2;
}
}
#包括
#包括
#包括“iterator.h”
使用名称空间std;
double*get\u from\u jack(整数*计数)
{
double*p=新的double[5];
p[0]=2.3;
p[1]=3.1;
p[2]=2.1;
p[3]=1.2;
p[4]=4.3;
*计数=5;
返回p;
}
向量*get_from_jill()
{
向量v;
v、 推回(2.1);
v、 推回(3.8);
v、 推回(5.1);
v、 推回(2.2);
v、 推回(1.9);
v、 推回(4.4);
向量*p=&v;
返回p;
}
void fct()
{
int jack_count=0;
double*jack\u data=从jack获取jack(&jack\u count);
向量*jill_data=get_from_jill();
双*插孔高=高(插孔数据、插孔数据+插孔计数);
向量&v=*jill_数据;
double*jill_high=high(&v[0],&v[0]+v.size());
coutget\u from\u jill()
返回指向指针的向量,该指针在函数终止后不再存在。
你要么像使用数组一样实例化堆上的向量,要么返回它的副本。我更喜欢后者,它会使你的代码更简洁。这就是你在get\u from\u jill
:…顺便说一句,这通常会从编译器生成警告。请在标题中,替换“course”通过“原因”。