又学一招!二维向量vector<vector<int>>在VC下的使用技巧。

随着对c++学习的逐步加深,发现STL确实是个好咚咚。vector是我用到的第一个STL容器,它一直吸引我学习和使用STL。但当我用到二维的vector时(比如vector<vector<int>>),却发现似乎不能用。我用的VC6就是不认它,竟报“error C2146: syntax error : missing ',' before identifier”。凭直觉,我觉得这不应该。网上一搜,类似这样的用法的代码比比皆是。看来是VC6太弱了,竟然不理解vector<vector<int>>为何物!无奈之下只能暂时放弃,另谋它途。然而一直耿耿于怀。

今天为了写一个算法,又要用到二维向量。这次决定追根究底。搜索了大半天,所有相关的文章、帖子都仔细地看了,终于在一个讨论“error C2653: 'std' : is not a class or namespace name”的问题的帖子中找到了答案。

那位达人说要在VC中用二维向量唯一的解决之道就是把它写成以下形式:

vector<vector<int>/**/>

经过测试,把/**/换成空格也可以,也就是只要不影响词法语法,最后两个 ' > ' 之间添加上一些东东把它们分开即可。

为什么VC中要这样,而其他编译器中就不用?原因还未知。难道是">>"运算符的优先级高的缘故?这就不得而知了。
反正终于可以用二维向量甚至多维向量了,心中欣喜之情难于表达,还哪有心思去追究原因啊。哈哈。且留待来日考究吧。如果哪位达人知道,还请不吝赐教!


Posted on 2007-10-22 00:33 Soli 阅读(1266) 评论(8)  编辑 收藏 所属分类: Programming

Feedback

#1楼    回复  引用    

2007-10-26 16:18 by Silentmoon [未注册用户]
不是编译器的问题,C++标准里不让这么写,必须隔个空格。

#2楼 [楼主]   回复  引用  查看    

2007-10-26 16:32 by Soli      
这样子啊。多谢指点。

#3楼    回复  引用  查看    

2007-11-05 06:23 by 踏雪无痕      
加上namespace就可以啊。
#include <vector>
std::vector<std::vector<int>> a;

我用的是vs2005,记得#include <vector>

#4楼 [楼主]   回复  引用  查看    

2007-11-05 20:35 by Soli      
VS2005我没用过。不过,Silentmoon说的不错,这似乎就是C++标准规定的。我这倒是有一份C++标准,但700多页呢,我一时也找不到这一条具体在哪。好像14.1.15节和14.2.3节讲的和这个有关。迄今,我找到的最权威的明确提出这一条的是“The C++ Standard Library——A Tutorial and Reference”一书。我看得是侯捷和孟岩翻译的那本,中文名叫《C++标准程序库——自修教程与参考手册》。第88页脚注有提到这个。如下:

6注意,两个“>”符合之间一定要有一个空格。“>>”会被编译器视为一个右移(right-shift)操作符,从而导致语法错误。

#5楼    回复  引用    

2008-04-08 20:33 by yun [未注册用户]
vector<int后两个">"之间要有空格!否则会被认为是重载">>"。
非常感谢 名字乱打个 应为心情很急切

#7楼    回复  引用    

2008-07-02 21:12 by jemaineking [未注册用户]
非常感谢!!

#8楼    回复  引用    

2008-08-09 19:26 by 山东分舵 [未注册用户]
新标准对这个问题要进行纠正