C++ visualc&x2B+;2010矢量定位不';似乎没有更新

C++ visualc&x2B+;2010矢量定位不';似乎没有更新,c++,visual-c++,vector,C++,Visual C++,Vector,我有一小段代码 int row[7]; bool equals = false; std::vector<int>range; for(int i = 1; i <= 35; ++i) { range.push_back(i); } for(int i = 0; i < 7; i++){ int number = range[rand() % range.size() + 1]; std::vector<int>::iterato

我有一小段代码

int row[7];
bool equals = false;

std::vector<int>range;

for(int i = 1; i <= 35; ++i)
{
    range.push_back(i);
}

for(int i = 0; i < 7; i++){
    int number = range[rand() % range.size() + 1];
    std::vector<int>::iterator pos = find(range.begin(), range.end(), number);
    row[i] = number;

    range.erase(range.begin() + (*pos - 1));
    std::cout << row[i] << endl;
}
return 0;
int行[7];
布尔等于假;
标准:向量范围;
对于(int i=1;i
可以超出向量的边界
使用

请使用以下代码:

std::vector<int>range;

for(int i = 1; i <= 35; ++i)
{
    range.push_back(i);
}
srand(time(0)) ;
for(int i = 0; i < 7; i++){
    int index = rand() % range.size() ;
    int number = range[index];
    row[i] = number;
    range.erase(range.begin() + index);
    std::cout << row[i] << endl;
}
std::vectorange;

对于(int i=1;我很高兴你否决了它,没有给我任何关于你认为这个问题有什么问题的信息。你应该发布一些复制这个问题的最小代码。根据你发布的内容,人们只能猜测。它现在被编辑成包含所有产生这个问题的代码@juanchopanzaThat可能是真的,但问题是真的看来迭代器在第一次运行时就被缓存了,我不知道如何强制它重新计算。我更新了答案,得到了一个索引的值,然后再次搜索该值以删除它,而不是删除实际索引中的元素,正如你可能猜到的那样,这不是最明智的做法可以使迭代器指向具有相同值的不同索引,这在您的情况下可能是个问题,也可能不是问题。
rand() % range.size()
std::vector<int>range;

for(int i = 1; i <= 35; ++i)
{
    range.push_back(i);
}
srand(time(0)) ;
for(int i = 0; i < 7; i++){
    int index = rand() % range.size() ;
    int number = range[index];
    row[i] = number;
    range.erase(range.begin() + index);
    std::cout << row[i] << endl;
}