std :: vector.size()不起作用

时间:2011-02-26 06:49:50

标签: c++ vector size

我有一些涉及一些向量的代码,但它拒绝给我矢量的大小:

using namespace std;

struct key_stat{
    string USER, url;
    float click_count, post_count, click_cost, post_cost;
    keyword_stat(): USER("") {}
};

class key
{
    private:
    string word;
    vector <key_stat> stats;
public:
    key(string & kw);
    vector <key_stat> get_stats(){return stats;}

};


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void search(string & word, vector <key> & keys){
    unsigned int x;
    // getting the x value
    for (x = 0; x < keys.size(); x++){
        if (keys[x].get_word() == word)
            break;
    }
    vector <keyword_stat> t = keys[x].get_stats();
    t.size()
}

这不起作用:

t.size(); 

有什么理由吗?

1 个答案:

答案 0 :(得分:3)

vector operator[]不进行边界检查。所以,这是发生的事情:

for (x = 0; x < keywords.size(); x++){
    if (keywords[x].get_word() == word)
        break;
}

如果在关键字向量中找不到您的word,则x将是关键字的大小。

vector <keyword_stat> t = keywords[x].get_stats();

一次一件:keywords[x]现在读取超出向量的末尾,返回垃圾。 .get_stats()尝试返回一个向量,但只是变得更加垃圾。

t.size();

现在你正在调用一个基本上是腐败数据的函数。

要解决此问题,请在x < keywords.size()中使用之前检查vector::operator[] - 或者只使用进行边界检查的vector::at()