我有一些涉及一些向量的代码,但它拒绝给我矢量的大小:
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();
有什么理由吗?
答案 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()
。