gpt4 book ai didi

c++ - 遍历并将数据插入标准 vector

转载 作者:行者123 更新时间:2023-11-28 06:17:11 24 4
gpt4 key购买 nike

我在使用 QVector 时从来没有遇到过这种问题,但不幸的是我不能在这个中使用 qt。我想要做的是遍历 2 个 vector ,其中包含点 X 和 Y 作为 double 值。

我试图在预定义的点之间插入一些 x 和 y 点。问题是在第二个循环之后一切都变坏了,迭代器开始得到奇怪的值并且这些点一直插入到 0 索引中。这个迭代器真的很困惑,我不明白为什么我不能简单地使用 intiger 索引插入到我的 vector 中。我也尝试了 C++11 方式,但没有给我任何东西。

m_x vector 表示以秒为单位的时间,m_y vector 表示温度。 m_x是double,但只能取整数正值。

int CProcessData::calculateMidPoints()
{
if((0 == m_x.size()) || (0 == m_y.size()))
return 1;

std::vector<double>::iterator itX = m_x.begin();
std::vector<double>::iterator itY = m_y.begin();
double midPointY = 0;

for (uint32_t i = 0; i < (m_x.size() - 1); i++)
{
if (i != m_x[i])
{
m_x.insert(itX, (double)i);
midPointY = (m_y[i - 1] * 1 + m_y[i] * (1 / (m_x[i + 1] - m_x[i]))) /
(1 + (1 / (m_x[i + 1] - m_x[i])));
m_y.insert(itY, midPointY);
}
else
{
itX++;
itY++;
}
}

return 0;
}

最佳答案

调用 insert() 将使您的迭代器失效。

来自 http://en.cppreference.com/w/cpp/container/vector/insert :

Causes reallocation if the new size() is greater than the old capacity(). If the new size() is greater than capacity(), all iterators and references are invalidated. Otherwise, only the iterators and references before the insertion point remain valid. The past-the-end iterator is also invalidated.

insert() 函数返回一个指向插入元素的迭代器。由于这是一个有效的迭代器,您可以捕获它并将其用于下一次迭代。这是一个如何工作的小例子:

std::vector<int> data = { 1, 2, 3, 4, 5 };
auto it = data.begin();
std::advance(it, 3);
for (int i = 0; i < 3; i++)
{
it = data.insert(it, 9);
++it;
}

data 将在 for 循环的末尾包含 { 1, 2, 3, 9, 9, 9, 4, 5 }

关于c++ - 遍历并将数据插入标准 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30035956/

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