亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下是關于C++ vector基本問題,麻煩大神們幫幫忙

以下是關于C++ vector基本問題,麻煩大神們幫幫忙

C++
牧羊人nacy 2021-10-25 18:14:33
當定義一個vector后,為什么賦值的時候int array2[]={2,3,4,5};vector<int> vecList2(array2,array2+4);后面是加4呢?如果按照其實位置array的話是2,array[1]=3,array[2]=4,array[3]=5,都是向后移動了3格而已啊?為什么要向后移動4格的呢?
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

// Create a vector v5 by copying the range v4[_First, _Last)
vector <int> v5( v4.begin( ), v4.begin( ) + 3 );
它在last的那個位置取的是開區間...
看這個程序.使用這個構造函數的時候,第一個參數是_first,即第一個元素的地址,第二個是_end(注,并不是最后一個元素的地址,而是最后一個元素后下一個元素的地址)
比如我們一般寫循環
for(iterator = vector.begin(); iterator!=vector.end(), vector++)這樣的.
vector.end()這個方法返回的是最后一個元素的下一個終結的地址.msdn里面對于end()返回值的解釋是這樣的:Returns a random-access iterator that points just beyond the end of the vector.

這下就好理解了,對于數組來說,我們循環的一般寫法是這樣的.
for(int i = 0; i<array.length; i++);
但是按照msdn的要求,我們如果知道最后一個元素的地址記做array.last+1,我們也可以寫成這樣
for(array *temp = array; temp!=array.last+1; temp++);
這樣就能看出來了,和下面那個寫法是不是很像?
for(iterator = vector.begin(); iterator!=vector.end(), vector++)

用迭代變量的時候是這樣構造,假設我們復制vec1的元素到vec2
vector(vec1.begin(),vec1.end());
那么對應的手動復制數組到vector的時候,vec1.begin()對應的就是array,vec1.end()對應的就是array.last+1.即array+length;
這就是為什么復制的時候加的不是3,而是4的原因了.

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int array2[]={2,3,4,5};
vector<int> vecList2(array2, array2+4);
vector<int>::iterator v5_Iter;

vector<int> vecList1(vecList2.begin(), vecList2.end());

for ( v5_Iter = vecList1.begin( ) ; v5_Iter != vecList1.end( ) ; v5_Iter++ )
cout << " " << *v5_Iter;

getchar();
return 0;
}



查看完整回答
反對 回復 2021-10-31
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

i=start; i < end; ++i
array2一共有4個元素,為array2[0],array2[1],array2[2],array2[3]
start從array2開始,end=array2+4

查看完整回答
反對 回復 2021-10-31
  • 2 回答
  • 0 關注
  • 245 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號