我有一些涉及 vector 的代码,但它拒绝给我 vector 的大小:
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();
有什么原因吗?
最佳答案
vector 的 operator[]
不做边界检查。所以,这是发生了什么:
for (x = 0; x < keywords.size(); x++){
if (keywords[x].get_word() == word)
break;
}
如果找不到您的 word
在关键字 vector 中,x
将是关键字的大小。
vector <keyword_stat> t = keywords[x].get_stats();
一次一个:keywords[x]
现在读取超出 vector 末尾的内容,返回垃圾。 .get_stats()
试图返回一个 vector ,但只会得到更多的垃圾。
t.size();
现在您正在对实质上损坏的数据调用函数。
要解决此问题,请检查 x < keywords.size()
在 vector::operator[]
中使用它之前-- 或者只使用 vector::at()
确实进行边界检查。
关于c++ - std::vector.size() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5125511/