c++ - std::vector.size() 不工作

标签 c++ vector size

我有一些涉及 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/

相关文章:

c++ - 我可以使用 MS 工具将浮点错误转变为 C++ 异常吗?

matlab - 最小化向量索引开销

c# - 如何测试向量3是否位于围绕特定点旋转的立方体内部

c++ - 您可以使用 auto 在 namespace 范围内定义类静态常量吗?

java 和 C++11 volatile

c - 在 C 中移动 vector 内的所有值

Android Logo 太小

java - 如何在Java中读取-旋转-写入操作后保存jpeg图像文件大小?

html - 为什么当将位置从固定位置更改为绝对位置时,div 元素的大小会发生变化?

c++ - C++ Excel COM自动化-Workbook.SaveAs-找不到成员