首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Essential C++书上72页的那个vector下标取地址的疑问解决方法

2012-03-09 
Essential C++书上72页的那个vector下标取地址的疑问Essential C++书上71,72页示例了一个函数,需要传入一

Essential C++书上72页的那个vector下标取地址的疑问
Essential C++书上71,72页示例了一个函数,需要传入一个 数组 或者一个 vector 的第一个元素的地址和最后一个元素的下一个地址。*first *last。

数组要取得最后一个元素的下一个地址,数组名+数组大小就可以了。这样不会越界错误。
但是书上在vector这里,取最后一个元素的下一个地址,用的是下标取法:&svec[svec.size()],svec是一个vector的变量名。
这样用下标的话就越界了啊,我VS2005执行的时候就报了越界错误。
但是书上又这么信誓旦旦的写着。哪里有问题?作者是primer的作者啊,我可是很信任的。

[解决办法]
恩,没错的
[解决办法]
在vc2005,vc 2008下都是越界:

[code=C/C++]
void main()
{
int a[] = {1,2,3,4};
vector<int> vec(a,a+4);
copy(&vec[0],&vec[4],ostream_iterator<int>(cout," "));
}
[code/]
[解决办法]

C/C++ code
//我猜了一下, 作者可能是这个意思//我理解有问题的话, 希望楼下指正#include <iostream>#include <vector>using namespace std;int main(){    int     array[4] = {5, 10, 20, 100};    vector<int>   ivec(array, array+4);    vector<int>::iterator    it = ivec.end();    cout << &ivec[ivec.size()] << endl;//[]优先级高于取地址,先结合得到最后一个元素的下一个位置                                                 //在取地址    cout << it << endl;    return  0;}
[解决办法]
VC2005、VC2008的检查偏狠了点。
cout << &ivec[0] + ivec.size() << endl;//
[解决办法]
确实这样~!`
[解决办法]
应该越界,不知道说上怎么写的

热点排行