與前面只有結構體的name聲明不一樣,初始化不一樣!!ios
// Practice3_vector_sort_struct.cpp : 定義控制檯應用程序的入口點。
//spa
#include "stdafx.h"
#include <vector>
#include <algorithm>
#include <iostream>
#include <ctime>
#include <stdio.h>
#include <string>字符串
using namespace std;string
struct ScoreStruct
{
char name[32]; //和上個例子不一樣,這裏聲明由string name改成char name[32]
unsigned int score;
bool operator <(const ScoreStruct &right) const
{
return score < right.score;
}
};it
void initVector(vector<ScoreStruct> &vec, unsigned int size)
{
srand(unsigned(time(NULL)));
for(unsigned int i =0; i < size; i++)
{
char buff[32] = {0};
int randNum = rand()%100;
sprintf(buff, "%d", randNum);
//ScoreStruct ss = {buff, randNum};//聲明改了,此句再也不能初始化,改成下面初始化
ScoreStruct ss = {"0", 0};
strcpy(ss.name, buff);// ss.name = buff,這樣不能正常工做!!爲什麼??
ss.score = randNum;
vec.push_back(ss);
}
}io
void printVector(vector<ScoreStruct> vec)
{
vector<ScoreStruct>::iterator it = vec.begin();
for(; it != vec.end();++it)
{
//cout << it->name << "," << it->score << " ";//聲明由string name改成char name[32],此句仍然能夠工做
printf("%d,", it->score);
printf("%s\n", it->name);//聲明由string name改成char name[32],此句能夠工做了,printf打印字符串必須是首地址,printf必須是純C,string是C++,因此不行
}
cout<<endl;
}stream
int _tmain(int argc, _TCHAR* argv[])
{
vector<ScoreStruct> vect;
initVector(vect, 4);
cout<<"before sort"<<endl;
printVector(vect);
sort(vect.begin(), vect.end());
cout<<"after sort"<<endl;
printVector(vect);
return 0;
}gc
printf程序