用内向量

时间:2016-07-08 22:22:45

标签: c++ vector struct

是否有任何优雅或有效的方法来填充结构(此结构)

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);
}

提前谢谢!!!

2 个答案:

答案 0 :(得分:4)

是的,结合了C ++ 11的两个基本原则:

  • 使用统一初始化,在本例中又称汇总初始化,直接与struct成员ab对话(即在初始化期间无需编写自定义构造函数;
  • 使用std::initializer_list vector 构造函数为每个成员ab提供任意长的元素列表,包括在统一初始化期间;
  • 然后为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_listdouble的外部向量,每个自身通过调用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 })
};