gpt4 book ai didi

c++ - 在方法中迭代 vector

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:21 25 4
gpt4 key购买 nike

我目前正在学习 C++,并且我有以下工作代码:

int main(int argc, char** argv) {
map<unsigned int, list<mpz_class>> otp;

// .....

for(auto it1 = otp.begin(); it1 != otp.end(); ++it1) {
bool first = true;
for(auto it2 = it1->second.begin(); it2 != it1->second.end(); ++it2) {
if (!first) {
cout << ", ";
} else {
first = false;
}
cout << *it2;
}
}
}

我想把列表的打印放到一个函数中。

这是我的尝试:

void prnt_list(vector it, ostream outstr, string delimiter) {
bool first = true;
for(auto it2 = it.begin(); it2 != it.end(); ++it2) {
if (!first) {
outstr << delimiter;
} else {
first = false;
}
outstr << *it2;
}
}

int main(int argc, char** argv) {
map<unsigned int, list<mpz_class>> otp;

// .....

for(auto it1 = otp.begin(); it1 != otp.end(); ++it1) {
prnt_list(it1->second, cout, ", ");
}
)

它不编译:

error: variable or field 'prnt_list' declared void
error: missing template arguments before 'it'
error: expected primary-expression before 'outstr'
error: expected primary-expression before 'delimiter'

然后我试了一下:

template <typename T>
void prnt_list<T>(vector<T> it, ostream outstr, string delimiter) {
...
}

但它也不起作用。

此外,我也不喜欢强制模板,因为我想允许任何 vector 。如果我能以某种方式使用 auto 关键字,那就更舒服了。

最佳答案

函数可以这样定义

std::ostream & prnt_list( const std::list<mpz_class> &lst, 
std::ostream &os = std::cout,
const char *delimiter = ", " )
{
bool first = true;

for ( const auto &obj : lst )
{
if ( first ) first = false;
else os << delimiter;

os << obj;
}

return os;
}

并称呼为

for ( const auto &p : otp ) prnt_list( p.second ) << std::endl;

您可以为任何容器编写通用函数。例如

template <class Container>
std::ostream & prnt_list( const Container &container,
std::ostream &os = std::cout,
const char *delimiter = ", " )
{
bool first = true;

for ( const auto &obj : container )
{
if ( first ) first = false;
else os << delimiter;

os << obj;
}

return os;
}

至于您的代码,那么至少没有声明标识符 vector ,并且流不可复制。

关于c++ - 在方法中迭代 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30427617/

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