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

size_t i = 0与迭代器一起在for语句头定义时出现错误

snowstorm 发布于 2008-10-17 16:56, 1300 次点击
// 编写程序由从标准输入设备读入的元素数据建立一个 int型 vector对象,然后
//动态创建一个与该 vector 对象大小一致的数组,把 vector 对象的所有元素复
//制给新数组。
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector <int> ivec;
    int inum;
    cout << "请输入一个整形数组以ctrl+z结束:" ;
    // 从键盘读入数据
    while (cin >> inum)
    {
        ivec.push_back(inum);
    }

    const int arry_size= ivec.size();

    int *ip = new int[arry_size];
    size_t i = 0;  // 为什么i要在外面定义才可以,若是在for的语句头定义就有错误呢?
    cout << "数组的个元素为:"
    for (vector <int>::iterator ix = ivec.begin(); ix != ivec.end(); ++ix)
    {
        ip[i] = *ix;
        cout << ip[i] << " "; //将容器里面的内容复制到动态数组里
        ++i;
    }
    delete [] ip;
    cout << endl;
    return 0;
}
注:不用告诉我可以不用这种方法,我只想知道出现这种情况是为什么 呵呵
2 回复
#2
debroa7232008-10-17 23:08
由于模板的原因,如果你这样写
for ( size_t i = 0 ,vector <int>::iterator ix = ivec.begin(); ix != ivec.end(); ++ix)
编译器会认为那个','号是在说,后面还有一个size_t的变量'vector <int>::iterator',
如果你这样写:
for ( vector <int>::iterator ix = ivec.begin() , size_t i = 0 ; ix != ivec.end(); ++ix)
同样会认为size_t是一个变更名.
for循环中可以定义多个变量,但类型一定是一样的,这样写
for( size_of i=0,j=0 ; ; )
关键在于那个逗号的语义.是指接着前面的声明类型接着再声明一个变量.
#3
snowstorm2008-10-18 21:13
谢谢 十分感谢 很抱歉这么晚才回复谢谢
1