检查std :: vector中是否存在给定索引

leo*_*n22 8 c++ iterator vector std

我需要索引访问我的std::vector,因此我必须检查索引是否已经可用于首先删除它们,然后设置一个新值.

这是我的setter函数:

void SetVector(int position, int value) {
    std::vector<int>iterator it = testVector.begin();
    // need a check here
    testVector.insert(it-testVector.begin()+position, value);
}
Run Code Online (Sandbox Code Playgroud)

或者这是我的需求错误的C++集合?(应该动态增长,所以std:array不可能).可以使用std::map但也许它也可能std::vector.

Mik*_*our 9

问题的要求并不完全清楚,但我假设你想要最终得到testVector[position] == value,无论是否position在范围内开始.

如果矢量太小,首先生长矢量.这将在已存在的任何内容之后插入零值.

if (position >= testVector.size()) {
    testVector.resize(position+1);
}
Run Code Online (Sandbox Code Playgroud)

然后指定要设置的元素:

testVector[position] = value;
Run Code Online (Sandbox Code Playgroud)

  • 对不起,但我必须反对这一点。`resize()` 将插入一个默认元素,然后你用你真正想要的值覆盖它。使用`push_back()`要好得多。 (2认同)

doc*_*ove 6

我不相信这个问题很清楚.如果你想

"首先删除它们,然后设置一个新值."

这可能会奏效

void SetVector(int position, int value) {
    if (position < testVector.size()) {
        testVector[position] = value;
    }
    else {
        testVector.push_back(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

你真的应该做int positiontestVectorsize_type.


San*_*oel 0

首先使用以下方法获取向量的迭代器

 std::vector<int>::iterator it;
Run Code Online (Sandbox Code Playgroud)

it = myvector.begin();

for (it=myvector.begin(); it<myvector.end(); it++)
    std::cout << ' ' << *it;
Run Code Online (Sandbox Code Playgroud)

使用 thsi 迭代器,您可以遍历所有元素并执行相应的操作,例如删除元素