是否有任何优雅或有效的方法来填充结构(此结构)
struct doublePolygon{
std::vector<double> x, y;};
我有这样的事情:
int main(void){
std::vector<doublePolygon> Poly;
doublePolygon Poly_tmp;
Poly_tmp.x = { 0, 23.37, 50.24, 31.26, 34.57, 1.46, 4.69, 0 }; // x
Poly_tmp.y = { 0, 11.91, 0, -21.39, -32.22, -26.31, -13.17, 0 }; // y
Poly.push_back(Poly_tmp);
Poly_tmp.x.clear();
Poly_tmp.y.clear();
Poly_tmp.x = { 42.19, 35.69, 29.76, 34.46, 42.19 }; // x
Poly_tmp.y = { -4.26, 2.34, -5.2, -11.87, -4.26 }; // y
Poly.push_back(Poly_tmp);
}
提前谢谢!!!
答案 0 :(得分:4)
是的,结合了C ++ 11的两个基本原则:
struct
成员a
和b
对话(即在初始化期间无需编写自定义构造函数; std::initializer_list
的 vector
构造函数为每个成员a
和b
提供任意长的元素列表,包括在统一初始化期间; vector
struct
double
做同样的事情
这是它的外观。我正在使用占位符来指示您放置std::vector<doublePolygon> vdp{ // calls vector( std::initializer_list<doublePolygon> )
{ // aggregate-initialise outer vector element [0]
{a, b, c, d, /* ... */}, // vector( std::initializer_list<double> ) for x
{e, f, g, h, /* ... */} // " for y
},
{ // outer vector element [1]
{i, j, k, l, /* ... */}, // x
{m, n, o, p, /* ... */} // y
}, /* etc... */
};
的位置,因此我们可以专注于概念而不是特定数据。
std::initializer_list
所以,那是构造一个struct doublePolygon
std::initializer_list
个double
的外部向量,每个自身通过调用std::initializer_list
个{bunch, of, elements}
个std::initializer_list<TemplateType>{the, things}
s的成员构造函数进行聚合初始化
请注意,编译器具有import csv
from tabulate import tabulate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
me = 'xxx@gmail.com'
password = 'yyyzzz!!2'
server = 'smtp.gmail.com:587'
you = 'qqq@gmail.com'
text = """
Hello, Friend.
Here is your data:
{table}
Regards,
Me"""
html = """
<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""
with open('input.csv') as input_file:
reader = csv.reader(input_file)
data = list(reader)
text = text.format(table=tabulate(data, headers="firstrow", tablefmt="grid"))
html = html.format(table=tabulate(data, headers="firstrow", tablefmt="html"))
message = MIMEMultipart(
"alternative", None, [MIMEText(text), MIMEText(html,'html')])
message['Subject'] = "Your data"
message['From'] = me
message['To'] = you
server = smtplib.SMTP(server)
server.ehlo()
server.starttls()
server.login(me, password)
server.sendmail(me, you, message.as_string())
server.quit()
的特殊知识,并在<html>
的相关上下文中创建一个,它可以推导出一种常见的非缩小类型。如果您有特殊类型需求或只是想要,可以明确声明:<body>
。另请注意,它仅用于初始化,而不是通用容器!它映射到一个临时数组,该数组只存在于完整表达式。
您可以研究这些概念的大量预先存在的信息,因为它们被广泛讨论和演示。可能是因为他们改进了语言的程度!
答案 1 :(得分:0)
您可以在结构中添加构造函数并获取:
struct doublePolygon {
std::vector<double> x, y;
doublePolygon(const std::vector<double>& x, const std::vector<double>& y)
: x(x), y(y) { }
};
然后初始化将是(在C ++ 11中)
std::vector<doublePolygon> Poly = {
doublePolygon({ 0, 23.37, 50.24, 31.26, 34.57, 1.46, 4.69, 0 },
{ 0, 11.91, 0, -21.39, -32.22, -26.31, -13.17, 0 }),
doublePolygon({ 42.19, 35.69, 29.76, 34.46, 42.19 },
{ -4.26, 2.34, -5.2, -11.87, -4.26 })
};