【发布时间】:2013-09-23 10:36:34
【问题描述】:
我正在尝试计算向量向量内的一系列元素的能量。一旦特定元素具有正确的能量,它就会被推入另一个向量向量。这里是一个例子,因为它很难解释:
bool energy(const std::vector<double> &vals)
{
float sum = 0.0;
for(unsigned i=0; (i < vals.size()); i++)
{
sum += (vals[i]*vals[i]);
}
//cout << sum << endl;
return (sum >= 5);
}
int main(int argc, char *argv[]) {
std::vector<vector<double> > vals {
{0, 0, 0, 0, 0}, // This has an energy of "0" -> does not count
{1, 1, 1, 1, 1}, // This has an energy of "5" -> push_back to vector[0]
{1, 1, 1, 1, 1}, // This has an energy of "5" -> push_back to vector[0]
{1, 1, 1, 1, 1}, // This has an energy of "5" -> push_back to vector[0]
{1, 2, 1, 1, 1}, //This has an energy of "5" -> push_back to vector[0]
{0, 0, 0, 0, 0}, // This has an energy of "0" -> does not count && start a new
// vector
{1, 2, 3, 4, 5}, // This has an energy of "55" -> push_back to vector[1]
{1, 2, 3, 4, 5}, // This has an energy of "55" -> push_back to vector[1]
{1, 2, 3, 4, 5}, // This has an energy of "55" -> push_back to vector[1]
{1, 2, 3, 4, 5} // This has an energy of "55" -> push_back to vector[1]
};
std::vector<vector<double> > clusters;
std::vector<vector<double> > tmp;
//std::for_each(vals.begin(), vals.end(), energy);
int j = 0;
for(unsigned i=0; (i < vals.size()); i++)
{
if(energy(vals[i]))
{
clusters.resize(j + 1);
clusters[j] = vals[i];
}else if(!energy(vals[i]) && energy(vals[i+1]))
{
j++;
}
}
for(unsigned i=0; (i < clusters.size()); i++)
{
for(unsigned j=0; (j < clusters[i].size()); j++)
{
cout << clusters[i][j] << ' ';
}
cout << endl;
}
}
会发生什么
命名为clusters的向量的向量中应该有2元素,每个元素都包含以下值:
clusters[0] = {
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 2, 1, 1, 1
};
`clusters[1] = 1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5}`
发生了什么?
向量的向量似乎覆盖了插入其中的块。所以不是上面的,我只是得到它找到的最后一个元素:
`cluster[0] = {1 2 1 1 1}
cluster[1] = {1 2 3 4 5}`
我的想法和尝试是将每个“块”存储在包含足够能量的向量向量中,然后将所有这些值推入vector<double>,然后将此向量插入集群块中。 .
是否有替代方法,更简单的解决此问题的方法?
【问题讨论】:
-
{1, 2, 1, 1, 1}, //这个能量为“8”
-
@cpp 抱歉,我稍微更改了值以确保我是正确的,它只是存储块的最后一个元素。它仍应存储 {0, 0, .....} 和 {0, 0, ....} 之间的每个元素有什么建议吗?
-
调用
resize,然后将新空间设置为所需的向量是不必要的。只需拨打clusters.push_back(vals[i]),它正在做同样的事情。您的问题似乎暗示您想将所有低能量向量合并为一个向量(对于高能量向量也是如此)。对吗? -
@ZacHowland 是的,将所有高能向量合并为一个。然后将它们推入当前位置的
clusters向量中。这有意义吗?我不知道该采取什么方法