首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确保向量中的访问索引存在?

如何确保向量中的访问索引存在?
EN

Stack Overflow用户
提问于 2014-12-10 18:46:12
回答 2查看 2.5K关注 0票数 1

我有一个文本标签std::vector<sf::Text> texts_的向量。我可以创建文本并将它们推入向量中,如下所示:

代码语言:javascript
运行
复制
texts_.push_back(utils::createText(x, y, "SomeString1"));
texts_.push_back(utils::createText(x, y, "SomeString2"));
// etc.

然后很容易地画成这样:

代码语言:javascript
运行
复制
for (std::size_t i = 0; i < texts_.size(); ++i) {
  renderTarget.draw(texts_.at(i));
}

我偶尔想要更新文本的字符串。我目前所做的是:

代码语言:javascript
运行
复制
texts_.at(0).setString("SomeUniqueString1");
texts_.at(1).setString("SomeUniqueString2");
texts_.at(2).setString("SomeUniqueString3");
// ...

以上所有的一切都很好。现在谈问题:

在更新字符串时,如果我意外地尝试访问例如10的索引,即使向量中只有5条文本,该怎么办?

如果我这样做,程序显然会崩溃。我可以每次检查索引是否小于向量的大小,但这有点过分(我需要在代码中添加更多的检查)。我怎样才能不费劲地确保该索引处的文本存在于向量中?

EN

回答 2

Stack Overflow用户

发布于 2014-12-10 18:51:16

如果你需要写的样板数量困扰你,只需在一个函数中写一次。

代码语言:javascript
运行
复制
template<class T, typename ValueType>
void SafeSetValue(T & container, size_t index, const ValueType & value)
{
    if (index < container.size())
        container[index] = value;
}

SafeSetValue(texts_, 0, "SomeUniqueString1");

在索引超出范围的情况下,您可以更改函数以执行不同的操作。

票数 4
EN

Stack Overflow用户

发布于 2014-12-10 18:50:24

如果我这样做,程序显然会崩溃。我可以每次检查索引是否小于向量的大小,但这有点过分(我需要在代码中添加更多的检查)。我怎样才能不费劲地确保该索引处的文本存在于向量中?

如果您使用std::vector<>::at()访问元素,则正在执行检查。如果索引超出范围,则会引发异常。不检查其他成员函数(特别是operator[])。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27408553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档