求解决几个初学c++的小疑点呃

求解决几个初学c++的小问题呃

1.得到一个最靠近中间的元素
vector<int>::iterator mid = vi.begin() + vi.size() / 2
vi.begin()和vi.size()的数据类型不一样啊 为什么的可以这么加 为什么需要这么加


2.
C/C++ code

#include <iostream>
#include <vector>
#include <string>
#include <cctype>

using namespace::std ;

int main ()
{
    /*输入一段文本到vector对象 每个单词存储为vector中的一个元素
      把vector对象中每个单词转化为大写字母 输出vector转化后的元素
      每8个单词为一行 */
    vector<string> m1 ;
    string word ;
    while ( cin >> word )
        m1.push_back(word) ;
    for ( vector<string>::size_type num1 = 0 ; num1 != m1.size() ; num1++ ) {
        for ( string::size_type num2 = 0 ; num2 != m1[num1].size() ; num2++ ) {
            m1[num1][num2] = toupper(m1[num1][num2]) ;
        }
        if ( ( num1 + 1 ) % 8 == 0 )
            cout << endl ;
        else
            cout << m1[num1] ;
    }  
    system ("pause") ;
    return 0 ;
}
//总是提示错误....可找了半天木有找到啊 ,在VS2010下编译



------解决方案--------------------
1、vi.begin()返回的是指向vector首个元素的指针,vi.size()则是返回vector的元素个数,相加相当于对指针进行了位移,加几就是向后移动几位,指向之后的第几个元素。
2、把错误贴出来……
3、没看懂
------解决方案--------------------
g++ 编译正常。

------解决方案--------------------
头文件加个#include <windows.h>试下
------解决方案--------------------
在VS2008编译正常
------解决方案--------------------
VS2010编译通过