C++ PRIMER中的cout << svec.end() - 2 << endl;

Andy84920 2003-10-17 07:36:15
#include <iostream>
using namespace std;
#include <vector>

int main()
{
int ia[] = { 1,2,3,4,5};
vector<int> ivec(ia,ia+5);

cout << "&ia" << ivec.end()-2 << endl;

return 0;
}

能给个理由为什么编译通不过吗?还有C++PRIME 上怎么有这样的错误呢?
...全文
72 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy84920 2003-11-16
  • 打赏
  • 举报
回复
唉,这个问题我真的不想在没有搞清楚之前结掉它啊!
帮帮忙啊!
ljan 2003-11-16
  • 打赏
  • 举报
回复
不是太清楚,看了下代码
typedef _A::pointer _Tptr;
typedef _Tptr iterator;
template<class _Ty, class _A = allocator<_Ty> >

上面是VC++的实现,这中间可能有些联系吧,也许是针对<<有运算符重载吧
Andy84920 2003-11-16
  • 打赏
  • 举报
回复
迭代器并不是指针虽然作用比它强!但类型不是!
C++注重类型而非表达式!
楼上的这么厉害?
刚学就说一星期后告诉我?
sykk 2003-11-16
  • 打赏
  • 举报
回复
其实我也不懂
我刚学。
呵呵
一星期后告诉你
zhouqingyuan 2003-11-16
  • 打赏
  • 举报
回复
vec.begin()它是一个iterator,作用同指针啊,所以可以直接这样输出地址的啊
Andy84920 2003-10-18
  • 打赏
  • 举报
回复
能解释一下编译通过 的理由吗?
我认为:
vec.begin()它是一个iterator,它是一个类的对象吧.
那怎么直接cout 这个对象呢?应该加个 &吧?
但我加个&变成 &( vec.begin());编译后出现:
a.C: In function `int main()':
a.C:13: warning: taking address of temporary
daizh 2003-10-17
  • 打赏
  • 举报
回复
:)我在VC6.0下编译没有错的。
Andy84920 2003-10-17
  • 打赏
  • 举报
回复
不知道你们用的什么编译器.(我用的是LINUX ,RH9.0, G++)

一个朋友在BCB上也通不过.我认为vec.begin()它是一个iterator,它是一个类的对象吧.
那怎么直接cout 这个对象呢?应该加个 &吧?
但我加个&变成 &( vec.begin());编译后出现:
a.C: In function `int main()':
a.C:13: warning: taking address of temporary
Andy84920 2003-10-17
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
using namespace std;

int main()
{
int ia[] = { 1,2,3,4,5};
vector<int, allocator<int> > ivec(ia,ia+5);

cout << "&ia" << ivec.begin();
return 0;
}


[linuxsir@ecit linuxsir]$ g++ a.C
a.C: In function `int main()':
a.C:12: no match for `std::basic_ostream<char, std::char_traits<char> >& <<
__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >'
operator
/usr/include/c++/3.2.2/bits/ostream.tcc:55: candidates are:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_ostream<_CharT,
_Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char,
_Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:77:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_ios<_CharT,
_Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits
= std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:99:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::ios_base&(*)(std::ios_base&)) [with _CharT = char,
_Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:171:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:208:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:146:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(bool) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:104: std::basic_ostream<_CharT,
_Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:115: std::basic_ostream<_CharT,
_Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned
int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:119: std::basic_ostream<_CharT,
_Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT
= char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:130: std::basic_ostream<_CharT,
_Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int)
[with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:234:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long long int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:272:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:298:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(double) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:145: std::basic_ostream<_CharT,
_Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:323:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long double) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:348:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(const void*) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:120:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT =
char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:211: std::basic_ostream<_CharT,
_Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, char) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:500:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, char) [with _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:222: std::basic_ostream<char,
_Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, signed char)
[with _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:227: std::basic_ostream<char,
_Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, unsigned char)
[with _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:572:
std::basic_ostream<_CharT, _Traits>&
std::operator<<(std::basic_ostream<_CharT, _Traits>&, const char*) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/bits/ostream.tcc:622:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, const char*) [with _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:246: std::basic_ostream<char,
_Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const signed
char*) [with _Traits = std::char_traits<char>]
/usr/include/c++/3.2.2/ostream:251: std::basic_ostream<char,
_Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const unsigned
char*) [with _Traits = std::char_traits<char>]
tuxw 2003-10-17
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
using namespace std;

换个顺序看看

daizh 2003-10-17
  • 打赏
  • 举报
回复
编译没有出错呀。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧