gpt4 book ai didi

c++ - 如何更改 C++ 中的 vector 项?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:35 24 4
gpt4 key购买 nike

我有一个 C++ 结构 vector ,我想单独修改每个项目。我发现执行 SomeStruct info = myVector[i] 会给我一个项目的拷贝,所以如果我修改它,什么都不会改变。所以现在我正在像这样重置项目:myVector[i] = info。有没有更有效的方法呢?一个不涉及复制操作的?

这是我当前的代码:

struct CharacterInfo {
QChar character;
int occurrences;
double frequency;
};

std::vector<CharacterInfo> characterInfos;

// Some code to populate the vector

for (unsigned i = 0; i < characterInfos.size(); i++) {
CharacterInfo info = characterInfos[i];
info.frequency = (double)info.occurrences / (double)totalOccurrences;
characterInfos[i] = info; // how to avoid this?
}

最佳答案

不会更改太多代码的最简单方法就是使用引用而不是实例。所以:

SomeStruct & info = myVector[i];

下一个最简单的方法是改变使用带索引的循环,例如:

for (std::vector<SomeStruct>::iterator it = myVector.begin(); it != myVector.end(); ++it)
{
SomeStruct & info = *it;
// do stuff here
}

借助 STL,您可以走得更远,尤其是如果您拥有支持 C++11 的编译器,例如:

std::for_each(std::begin(myVector), std::end(myVector), [](SomeStruct & info) { /* do stuff here */ });

也与您的问题没有直接关系,但是如果您向计算频率的结构添加一个方法,代码将变得更加清晰,例如,您可以按照上一个示例执行以下操作:

std::for_each(std::begin(myVector), std::end(myVector), std::mem_fun(&SomeStruct::calculateFrequency));

如果您将对 std::begin(myVector) 的调用更改为 myVector.begin() 并且同样结束。

关于c++ - 如何更改 C++ 中的 vector 项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8238806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com