矢量如何成为矩阵?

时间:2016-01-09 16:59:40

标签: c++

所以我在互联网上找到了这个代码,但因为我不熟悉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;
        }
 }

4 个答案:

答案 0 :(得分: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访问[] s数组中的字母:

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

答案 1 :(得分: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!

因此,字符串数组实际上是一个2D字符数组,您称之为矩阵。

答案 2 :(得分:0)

string v[N]string的数组,string本身是chars的数组。

答案 3 :(得分:0)

正如评论员所指出的那样,你给出的代码中既没有向量也没有矩阵,我会做出几个假设:

  • “vector”是指“array”
  • 您认为双方括号运算符([][])表示矩阵。

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

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];

在上面的行中,第一个方括号运算符返回数组中的第一个字符串。然后将第二个方括号运算符应用于该字符串,该字符串返回该字符串的第一个字符。

这是有效的,因为数组和字符串(它们本身就是数组本身)都实现了方括号运算符来通过索引访问它们的内部元素。

从技术上讲,以复杂的方式,您可以将其称为矩阵,但“2D字符数组”会更合适。