注册 登录
编程论坛 C++教室

为什么 VC上这个都不行

诸葛修勤 发布于 2011-05-11 21:17, 552 次点击
程序代码:
#include <iostream>
#include <vector>
#include <list>
using namespace std;

int main()
{
    vector<int> ivec(10, 3);
    list<double> ilist(ivec.begin(), ivec.end());

    typedef list<double>::const_iterator type;
    for (type in=ilist.begin(); in!=ilist.end(); ++in)
    {
        cout << *in << ' ';
    }
    cout << endl;

    return 0;
}
7 回复
#2
yuccn2011-05-11 23:39
程序代码:
#include <iostream>
#include <vector>
#include <list>
using namespace std;

int main()
{
    vector<int> ivec(10, 3); // 10 个3
    list<double> ilist(*(ivec.begin()), *(ivec.end()-1)); // 也就是list<double> ilist(3, 3);  即是3 个3

    typedef list<double>::const_iterator type;
    for (type in=ilist.begin(); in!=ilist.end(); ++in)
    {
        cout << *in << ' ';
    }
    cout << endl;

    return 0;
}
你要的是这个吧。 ivec.begin() 改成*(ivec.begin());
有点象指针
int b = 10;
int *p = &b; 取值时候,要 int a = *p; //而不是int a = p
#3
玩出来的代码2011-05-12 00:01
说不行,你倒是说个怎么不行,然后去找原因,简单的一看就知道、复杂的跟踪到里面也就知道是怎么回事了。
LZ的代码没问题,通不过就是编译器的原因了。想继续学习那就升级编译器吧。
#4
寒风中的细雨2011-05-12 00:11
回复 2楼 yuccn
不是那样子用
   1) vector<int> ivec(10, 3);//这是一种容器的构造函数
   2) list<double> ilist(ivec.begin(), ivec.end());//这是另一种容器的构造函数
第一种就不用说啦

第二种就是用迭代器[ivec.begin(), ivec.end())内元素的 复制一份到ilist中
虽然元素的类型int double 不同但是他们之间是可以默认转换的 所以不会造成问题

相信你的应该可以运行这样子的:
程序代码:
#include <iostream>
#include <vector>
#include <list>
using namespace std;

int main()
{
    vector<int> ivec(10, 3);
    list<int> ilist(ivec.begin(), ivec.end());

    typedef list<int>::const_iterator type;
    for (type in=ilist.begin(); in!=ilist.end(); ++in)
    {
        cout << *in << ' ';
    }
    cout << endl;

    return 0;
}


Linux下原代码没有问题 输出和上面的是一样的
#5
寒风中的细雨2011-05-12 00:12
回复 楼主 诸葛修勤
和平台有关系
#6
yuccn2011-05-12 00:38
回复 4楼 寒风中的细雨
谢谢评点。
#7
rjsp2011-05-12 08:47
不行,你也给个说法呀,比如哪句编译不通过,报什么错?
支持3楼的回复
#8
pangding2011-05-12 11:13
我也觉得代码什么问题。不知道楼主遇到的具体是什么问题?

vc 经常会遇到不少诡异的情况。这种时候百度很重要,因为那些情况问的人很多。
1