检查std::vector中是否存在给定索引
Check if a given index exists in std::vector
我需要对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);
}
还是这是我需要的错误的C++集合?(应该是动态增长的,所以不可能有std:array
)。可以使用std::map
,但也可能使用std::vector
。
问题中的要求并不完全清楚,但我假设您希望最终得到testVector[position] == value
,无论position
一开始是否在范围内。
如果矢量太小,请先增长它。这将在已经存在的值之后插入零值。
if (position >= testVector.size()) {
testVector.resize(position+1);
}
然后指定要设置的元素:
testVector[position] = value;
我认为这个问题不清楚。如果你想要
"先删除它们,然后设置一个新值。"
这可能适用于
void SetVector(int position, int value) {
if (position < testVector.size()) {
testVector[position] = value;
}
else {
testVector.push_back(value);
}
}
你真的应该把int position
变成testVector
的size_type
。
如果在该索引中没有任何内容,则可以使用std::vector::at which抛出异常。
函数会自动检查n是否在向量中的有效元素,如果不是(即,如果n大于或等于其大小)。这是在与不检查边界的成员运算符[]形成对比。
由于您在给定索引处获得了对象的引用,因此您可以更改/删除值
void SetVector(int position, int value) {
try
{
testVector.at(position) = value;
}
catch (const std::out_of_range& oor) {
testVector.resize(position + 1);
testVector[position] = value;
}
}
首先使用为向量获取迭代器
std::vector<int>::iterator it;
it = myvector.begin();
for (it=myvector.begin(); it<myvector.end(); it++)
std::cout << ' ' << *it;
使用thsi迭代器,您可以遍历所有元素并执行相应的操作,如删除元素
相关文章:
- C++模板来检查友元函数的存在
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- g++ 说函数不存在,即使包含正确的标头
- 检查数组的所有索引中是否存在值
- 如何确保向量中访问的索引存在
- 如何检查数组索引是否存在
- 检查std::vector中是否存在给定索引
- 为什么 QList::at() 不检查索引是否存在并返回只读值?
- 访问内存中不存在的数组索引的正确异常类型?
- 哪个子类对象存在于某个索引