2016-01-09 267 views
-6

所以我在互聯網上發現了這個代碼,但是因爲我不熟悉C++。我發現很難理解這一點:矢量如何突然變成矩陣?矢量是如何變成矩陣的?

int main(){ 

int n; 
string v[MAX]; 

cin >> n; 

for(int i=0;i<n;i++) 
cin >> v[i]; 

for(int i=0;i<n-1;i++){ 
    int y1,y2; 
    y1=v[i].size(); 
    y2=v[i+1].size(); 
    for(int j=0; j<y1 && j<y2 ;j++) 
     if(v[i][j]!=v[i+1][j]){ // here <- 
      int x1,x2; 
      x1=(int) v[i][j]-'A'; 
      x2=(int) v[i+1][j] - 'A'; 
      m[x1][0]=true; 
      m[x2][0]=true; 
      m[x1][x2+1]=true; 
      break; 
     } 
} 
+3

你的意思是「爲什麼我可以在'v''上使用'[i] [j]'?因爲它是一個數組(第一組)(std :: string)(第二組)。 'std :: string'支持'myString [index]'。 – BoBTFish

+7

此代碼中的任何位置沒有矢量或矩陣 – UnholySheep

+0

'v [i] [j]'表示:第i個字符串中的第j個字符 – bolov

回答

4
string v[MAX]; 

陣列的std::string(大概是 - 這是一個原因avoid using namespace std;我怎麼知道它是什麼類型的string?)。

您可以訪問數組中的元素與[]

int someInts[5]; 
someInts[3]=1000; // sets the 4th int (counting starts from 0) 

您也可以訪問字符在std::string with []

std::string name("chris"); 
std::cout << name[3]; // prints 'i' 

這樣你就可以訪問該字母的std::string秒的陣列兩套[]

std::string names[10]; // 10 names 
names[3] = "chris"; // set the 4th name 
std::cout << names[3][1]; // prints 'h' 
//     ^access letter in string 
//    ^access string in array 
0

string v[N]是一個數組string,string本身是一個數組chars

+0

「'字符串本身是一個'char's的數組 - 」 - 我知道你正在努力簡化初學者,但我認爲這太過分了,以後會引起混淆。 – BoBTFish

+0

注意,這對初學者並不簡單,'string'內部是用'char []'(字符數組)實現的。 – tchelidze

+0

因此,如果我創建任何包含數組的類,我可以通過在周圍的類上使用'[]'來訪問該數組?不,這只是一些內部細節。 'string'是一個'string',*的行爲有點像'char'數組。 (並且包含一個指向*分配數組的char *)。 – BoBTFish

1

這是一個不言自明的例子

int main() 
{ 
    std::string name; 
    name = "test"; 
    for(int i = 0; i<4; i++) 
     std::cout<<name[i]<<std::endl; 
    std::cout << "Hello, " << name << "!\n"; 
} 

它將打印

t 
e 
s 
t 
Hello, test! 

因此,字符串數組實際上是字符的二維數組,你叫一個矩陣。

0

因爲,作爲評註者指出的那樣,在你給的代碼沒有向量或矩陣,我會做一些假設:

  • 「載體」,你的意思是「數組」
  • 您認爲雙方括號運算符([][])表示矩陣。

如果這些都是真的,我可以解釋你所看到的:

string[5] strings = { Some Strings... } 

//The first string in the array 
string string1 = strings[0]; 
//The first letter of the first string 
char char1 = string1[0]; 

//The above is the same as: 
char char1Again = strings[0][0]; 

在上面的線,第一個括號操作符返回數組中的第一個字符串。然後將第二個方括號運算符應用於該字符串,該字符串返回該字符串的第一個字符。

這是可行的,因爲數組和字符串(它們實際上是數組自身深入)實現方括號運算符以通過索引訪問其內部元素。

從技術上講,用一種令人費解的方式,你可以稱之爲矩陣,但「二維數組的字符」會更合適。