if (vecProxyInfo.size() > m_vecProxyInfo.size()) { m_vecProxyInfo.clear(); m_vecProxyInfo.reserve(vecProxyInfo.size()); for (const auto& proxyInfo : vecProxyInfo) { m_vecProxyInfo.append(QSharedPointer<app::system::ProxyInfo>::create(proxyInfo)); } } else if (vecProxyInfo.size() < m_vecProxyInfo.size()) { m_vecProxyInfo.resize(vecProxyInfo.size()); auto itM = m_vecProxyInfo.begin(); for (const auto& proxyInfo : vecProxyInfo) { (*itM)->strName = proxyInfo.strName; (*itM)->eType = proxyInfo.eType; (*itM)->bConnected = proxyInfo.bConnected; ++itM; } } else { auto itM = m_vecProxyInfo.begin(); for (const auto& proxyInfo : vecProxyInfo) { (*itM)->strName = proxyInfo.strName; (*itM)->eType = proxyInfo.eType; (*itM)->bConnected = proxyInfo.bConnected; ++itM; } }怎么优化比较好
时间: 2023-12-17 08:03:09 浏览: 69
cifafenxi.rar_If_ Then
这段代码中,主要是对两个 vector 进行比较、更新,可以考虑使用 STL 算法和容器的一些特性进行优化,如下所示:
```
// 清空原有数据
m_vecProxyInfo.clear();
// 复制新的数据
std::transform(vecProxyInfo.begin(), vecProxyInfo.end(), std::back_inserter(m_vecProxyInfo),
[](const auto& proxyInfo) { return QSharedPointer<app::system::ProxyInfo>::create(proxyInfo); });
```
这里使用了 STL 算法 `std::transform` 和容器 `std::back_inserter` 的特性,可以一行代码实现 vector 元素的复制和插入。
对于第二种情况,也可以使用 STL 算法和容器的特性进行优化:
```
// 重新分配内存
m_vecProxyInfo.resize(vecProxyInfo.size());
// 更新数据
std::transform(vecProxyInfo.begin(), vecProxyInfo.end(), m_vecProxyInfo.begin(),
[](const auto& proxyInfo, const auto& proxyPtr) {
proxyPtr->strName = proxyInfo.strName;
proxyPtr->eType = proxyInfo.eType;
proxyPtr->bConnected = proxyInfo.bConnected;
return proxyPtr;
});
```
这里使用了 STL 算法 `std::transform` 和容器 `begin()` 方法的特性,可以简化代码。同时,由于 `m_vecProxyInfo` 中的元素是 `QSharedPointer`,可以直接通过指针访问元素的成员变量,避免了使用迭代器的繁琐操作。
阅读全文