我想遍历包含 double 类型的整个列,并将每个值除以列的大小。这会给我频率。我不会在数组或任何其他数据类型中这样做。我仍在学习向量。这是我要操作的 2D 矢量类型
vector<pair<char, double>> output;
如果你有 C++11:
for (auto & p : output)
{
cout << p.first << " " << p.second << "\n";
}
std::cout << std::endl;
或使用 C++03
for (std::vector<std::pair<char, double> >::iterator it = output.begin();
it != output.end(); ++it)
{
cout << it .first << " " << it .second << "\n";
}
std::cout << std::endl;
您可以将向量视为数组,并使用[]
. 例如:
for (size_t i = 0; i < output.size(); ++i)
{
pair<char, double>& element = output[i]; // access element i in the vector
cout << element.first; // prints the first member of the pair
cout << element.second; // prints the second member of the pair
}
std::pair 是一个结构模板,它提供了一种将两个异构对象存储为一个单元的方法。
如果你有一个向量,pairs
这意味着你将通过对接口访问数据。您可以通过first
member 和第二个通过获得对的第一个数据second
。
for(std::vector<std::pair <char, double> >::const_iterator vpci = arg.begin();
vpci != arg.end(); ++vpci) {
cout << vpci->first << "->" << vpci->second;
}
甚至更好,也许创建一个模板:
template <typename T1, typename T2>
void prn_vecOfPair(const std::vector<std::pair <T1, T2> > &arg, string sep ="") {
for(std::vector<std::pair <T1, T2> >::const_iterator vpci = arg.begin();
vpci != arg.end(); ++vpci) {
cout << vpci->first << "->" << vpci->second << sep;
}
}
在 C++11 中,这(像往常一样)可以更容易地完成:
for (auto & i : output)
{
cout << i->first << "->" << i->second << "\n";
}