用于向量中结构的 C++ 访问索引或使用引用而不是值

Posted

技术标签:

【中文标题】用于向量中结构的 C++ 访问索引或使用引用而不是值【英文标题】:C++ for structure in vectors access index or use reference instead value 【发布时间】:2019-03-10 12:41:21 【问题描述】:

我假设如果我有,例如:

vector<string> myVector;
myVector.push_back("Camel");
myVector.push_back("is");
myVector.push_back("a");
myVector.push_back("noble");
myVector.push_back("animal");

我愿意:

for (string val : myVector)
    val = "empty";

它不会替换向量中的值,因为它已将内容复制到新字符串。

我认为我可以做到

for (int i=0; i<myVector.size(); i++) 
    myVector[i] = "empty";

它将执行该行为。

不过还好。我的问题是:

存在与第一种情况类似的任何其他结构,我可以说“选择向量中值的引用而不是将值复制到新变量”,然后我可以直接影响向量值并拥有 @987654324 @打字模型?

或者不使用我提到的任何案例的示例的最佳实践?迭代器?

【问题讨论】:

在这种特殊情况下,std::fill 将完成任务并为其附加一个有意义的名称。 很高兴知道@chris,但遗憾的是我想像这样简化示例代码。但我一直在寻找如何通过引用访问。无论如何,当我需要它时,我会记住“填充”。非常感谢。 是的,我认为这对大多数未来的访问者来说不是一个有用的答案,但可能会对奇怪的人有所帮助。 【参考方案1】:

声明基于 for 循环的范围以初始化对每个项目的引用:

for (string& val : myVector)
    val = "empty";

现在矢量的项目已就地修改。 “项目”的类型可以是...

<item-type> declarator = *itr;

...当itr 是容器的迭代器时有效。

【讨论】:

按预期工作!这是我的坏事,因为我认为现在它有点明显,但很清楚它是这样的。非常感谢@StoryTeller!在 5 分钟内接受答案.. 你太快了 :)

以上是关于用于向量中结构的 C++ 访问索引或使用引用而不是值的主要内容,如果未能解决你的问题,请参考以下文章

c++ 引用向量的问题?

C++:在多个线程中访问同一数组/向量的不同单元是不是会产生数据竞争?

用于一次性查找但多次遍历和访问的容器的 C++ 有效方法

带有浮点索引的 C++ 数组/向量

在 C++ 中访问列表向量的问题

索引到向量时的自引用